>  기사  >  웹 프론트엔드  >  Node.js의 비차단 I/O란 무엇입니까? 예시를 통해 이해해보세요!

Node.js의 비차단 I/O란 무엇입니까? 예시를 통해 이해해보세요!

青灯夜游
青灯夜游앞으로
2021-08-13 10:55:392318검색

Node.js에서 비차단 I/O란 무엇인가요? 이 기사는 Node.js의 비차단 I/O를 이해하는 데 도움이 되는 예제를 사용합니다.

Node.js의 비차단 I/O란 무엇입니까? 예시를 통해 이해해보세요!

Written at the front

저는 오랫동안 Node.js를 배우고 싶었습니다. 프론트엔드는 서버측 지식을 이해하고 독립적으로 작은 풀스택을 완성할 수 있어야 한다고 생각합니다. 하지만 시간적 요인으로 인해 지난 학기에 몇 가지 기본 사항을 배운 후 더 이상 배울 시간이 없었습니다. 마침 오늘 두 번째 과정을 통과하여 Node.js를 다시 테스트하러 왔습니다! ! ! [추천 학습: "nodejs 튜토리얼"]

  • I/O는 입력/출력입니다. 시스템의 입력과 출력
  • 차단 I/O와 비차단 I/O의 차이점은 시스템은 출력 기간 동안 다른 입력을 받을 수 있습니다

예를 들어

  • 매점에 가서 식사하세요. 우리 모두는 음식을 위해 줄을 서야 합니다

    우리의 프로세스는 다음과 같습니다. ---->기다려요 앞에 사람들이 요리 중이에요 --> 우리가 직접 요리할 차례예요 -------> 식사를 시작해요

  • 외식하기 : 식당에서 음식 주문하기

    이제 우리의 과정은 다음과 같습니다: 앉기------> 주문하기------> 먹기 시작하기

    이상한 것을 사용해 보세요 in markdown

  • 음식을 주문하기 위해 줄을 서는 것과 레스토랑 주문을 비교하는 것

  • 직원에게 주문을 하는 사람들의 경우:

    • 먹기 위해 줄을 서는 것은 I/O를 차단하는 것입니다
    • 레스토랑 주문은 논 블로킹입니다 I /O

계속해서 윗문장을 보세요:

시스템이 입력을 받는데 출력 기간 동안 다른 입력을 받을 수 있나요?

밤에는 시스템 = 요리하는 아줌마 구내식당 또는 식당 웨이터, 입력 = 음식 주문, 출력 = 음식 제공(음식 제공)

식당의 이모는 음식을 하나씩만 제공할 수 있습니다--------->

웨이터는 음식을 주문한 후에도 다른 사람에게 서빙을 할 수 있습니다. 손님 ------->Non-blocking I/O

사실 이 문제는 우리 초등학교 선생님이 가르쳐주셨어요

Xiaofang은 어머니의 집안일을 도와줍니다. 그녀가 해야 할 일: 세탁기로 빨래(20분), 바닥 쓸기(10분), 책상 정리(10분), 옷 걸기(5분). Xiaofang이 이러한 작업을 최소 ( )분 안에 완료할 수 있도록 영리하고 합리적인 새 시퀀스를 설계할 수 있습니까?

A.20

B.25

C.30

D.35

기대하지 못하셨나요? (사실 기대는 안했어요~)

이 과정에서 우리는 세탁기를 이용해 세탁 = 투입, 건조 = 배출을 하게 되는데, 세탁기가 옷을 세탁하는 동안 우리는 다른 일을 할 수 있기 때문이죠. 이게

non- Blocking I/Oyo입니다.

Thinking

비차단 I/O를 이해하려면 가장 먼저 결정해야 할 것은 무엇입니까?

    입/출력 시스템이 있는지 확인해야 합니다.
  • I/O 프로세스 중에 다른 I/O를 수행할 수 있는지 생각해 보세요.
    • Can------>Non-blocking
    • Cannot------>Blocking

Write a chestnut

먼저 새로운 index.js 그런 다음 프런트엔드 vs-code를 열고 터미널을 열고 <code>npm install glob를 실행하여 glob 패키지를 설치하면 I/O가 차단되었는지 더 편리하게 관찰할 수 있습니다.

index.js,再打开我们前端人的vs-code,打开终端,执行npm install glob安装一个glob包,来帮我们更加方便去观察I/O是否阻塞。

先来看阻塞I/O

代码先贴上:index.js

const glob = require(&#39;glob&#39;);

var result = null;
console.time(&#39;glob&#39;)
result = glob.sync(__dirname + &#39;/**/*&#39;)
console.timeEnd(&#39;glob&#39;)
console.log(result)

首先,先用require引入我们的glob包,接下来,用glob.sync去做一个打印目录的一个操作,将结果打印的同时,利用time/timeEnd,去记录时间,看node执行这个操作共花费多少时间。

在终端输入node index.jsBlocking I/O를 먼저 살펴보겠습니다

코드가 먼저 붙여져 있습니다: index.jsNode.js의 비차단 I/O란 무엇입니까? 예시를 통해 이해해보세요!

const glob = require(&#39;glob&#39;);
var result = null;
console.time(&#39;glob&#39;)
glob(__dirname + &#39;/**/*&#39;,function(err,res){
    result = res;
    // console.log(result)
    console.log(&#39;got result&#39;);
})
console.timeEnd(&#39;glob&#39;)
console.log(&#39;今天你卷了没?&#39;)

먼저 require를 사용하여 glob 패키지를 소개합니다. 다음으로 glob.sync를 사용하여 만듭니다. 디렉터리를 인쇄하는 작업입니다. 결과를 인쇄하는 동안 time/timeEnd를 사용하여 시간을 기록하고 노드가 이 작업을 수행하는 데 걸리는 시간을 확인합니다.

이 파일을 직접 실행하려면 터미널에 node index.js를 입력하세요.

첫 번째 줄을 보세요. 내 컴퓨터에서 실행하는 데 총 20.93밀리초가 걸립니다. 서버는 더 이상 작지 않습니다.

Non-blocking I/O를 다시 살펴보세요Node.js의 비차단 I/O란 무엇입니까? 예시를 통해 이해해보세요!

코드로 직접 이동:

rrreee

이번에는 콜백 함수를 사용하여 연산합니다. 결과를 인쇄하려면 줄이 너무 많기 때문에 인쇄로 대체하겠습니다. 'got result', 타이밍이 완료된 후 print 문 작업을 수행하면 결과를 살펴보겠습니다.

우선 시간은 3.258ms로 이전 20.93과 비교하면 는 단순히 적다, 너무 많지는 않습니다. 뭐, 마지막에 우리가 출력하는 명령문이 있고, 마지막으로 우리가 원하는 연산 결과가 인쇄됩니다. 즉, 입력과 출력 사이에 다른 연산을 수행하고 결과에 영향을 미치지 않습니다. 시간이 훨씬 덜 걸립니다!

🎜🎜결론🎜🎜🎜내 이해: 비차단 I/O를 사용하면 대기 시간을 많이 줄일 수 있으며 대기 시간 동안 다른 작업도 수행할 수 있습니다(어떤 조언이라도 환영합니다!!!) 🎜

모든 것에는 절대적인 것이 없습니다. Non-Blocking I/O가 반드시 좋다는 뜻은 아닙니다. 예를 들어, 웨이터들 사이에 사고가 발생하면 모든 손님이 기다려야 합니다. 레스토랑의 전반적인 품질에 영향을 미칠 이 웨이터에 대해 (예(서버 충돌로 이해됨), I/O를 차단합니다. 웨이터가 여러 명이므로 일대일 서비스를 제공하므로 그 중 한 명에게 사고가 발생하더라도 전반적인 품질에는 영향을 미치지 않으며 여러 웨이터를 고용하는 데도 그에 따른 비용이 듭니다.

더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 소개를 방문하세요! !

위 내용은 Node.js의 비차단 I/O란 무엇입니까? 예시를 통해 이해해보세요!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 掘金--Ned에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제