"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Node.js에서 이벤트 루프가 어떻게 작동하나요?

Node.js에서 이벤트 루프가 어떻게 작동하나요?

2024-08-24에 게시됨
검색:424

How event loop work in Node.js?

이벤트 루프는 비동기 작업을 효율적으로 처리할 수 있게 해주는 Node.js의 핵심 개념입니다. 작동 방식에 대한 간단한 설명은 다음과 같습니다.

1. 단일 스레드 특성

Node.js는 단일 스레드에서 작동합니다. 이는 한 번에 하나의 코드만 실행할 수 있음을 의미합니다. 그러나 Node.js는 여러 스레드를 요구하지 않고 동시에 많은 작업을 처리하도록 설계되었습니다.

2. 논블로킹 I/O

Node.js는 비차단 I/O 작업을 사용합니다. Node.js는 파일 읽기, 데이터베이스 쿼리 또는 네트워크 요청과 같은 작업을 수행할 때 이러한 작업이 완료될 때까지 기다리지 않고 다음 작업으로 넘어갑니다. 대신 이러한 작업이 처리되는 동안 다른 코드를 계속 실행합니다.

3. 이벤트 루프 메커니즘

이벤트 루프는 코드 실행을 관리하고 비동기 이벤트를 처리하는 역할을 합니다. 작업의 "큐"를 지속적으로 확인하고 실행할 작업을 결정합니다. 단계별 분석은 다음과 같습니다.

  • 초기화: Node.js 애플리케이션이 시작되면 환경을 초기화하고 설정합니다.
  • 실행 단계: Node.js는 모든 초기 코드를 동기식으로 실행합니다. 비동기 작업(예: 파일 읽기 또는 HTTP 요청)이 있는 경우 시스템의 API로 전달됩니다.
  • 이벤트 루프 단계: 이벤트 루프에는 여러 단계가 있으며 각 단계의 작업을 특정 순서로 처리합니다.
    • 타이머 단계: setTimeout() 및 setInterval()에 의해 예약된 콜백을 실행합니다.
    • IO 콜백 단계: 파일 읽기 또는 네트워크 요청과 같은 I/O 작업에 대한 콜백을 실행합니다.
    • 유휴, 준비 단계: 시스템 작업에 사용되는 내부 단계.
    • 폴링 단계: 새로운 I/O 이벤트를 검색하여 콜백을 실행합니다. 폴 큐가 비어 있으면 setImmediate() 큐에 콜백이 있는지 확인합니다.
    • 단계 확인: setImmediate()에 의해 예약된 콜백을 실행합니다.
    • 콜백 닫기 단계: 소켓.on('close')에서 발생하는 것과 같은 닫기 이벤트를 처리합니다.
  • 재확인 및 종료: 이벤트 루프에 더 이상 처리할 작업이 없으면 종료되어 프로그램이 종료될 수 있습니다. 아직 보류 중인 작업이 있으면 계속 실행됩니다.

4. 콜백 대기열

비동기 작업이 완료되면 콜백을 대기열에 푸시합니다. 이벤트 루프는 대기열에서 이러한 콜백을 선택하고 순서대로 실행합니다.

5. 마이크로태스크 큐(다음 틱)

메인 대기열 외에도 process.nextTick() 또는 promise의 .then() 핸들러로 예약된 콜백이 대기열에 저장되는 마이크로태스크 대기열(또는 다음 틱 대기열)도 있습니다. 마이크로태스크는 일반 콜백보다 우선순위가 높습니다. 즉, 현재 작업이 완료된 후 이벤트 루프가 다음 단계로 이동하기 전에 실행됩니다.

다음은 이벤트 루프의 작동 방식을 보여주는 간단한 예입니다.

const fs = require('fs');

console.log('Start');

fs.readFile('file.txt', (err, data) => {
  if (err) throw err;
  console.log('File read complete');
});

console.log('End');

산출:

Start
End
File read complete

설명:

  1. console.log('시작'); 그리고 console.log('End'); 동기적으로 실행됩니다.
  2. fs.readFile은 비동기 파일 읽기 작업을 시작하고 기다리지 않고 다음 코드 줄을 계속 실행합니다.
  3. 파일 읽기 작업이 완료되면 해당 콜백(console.log('파일 읽기 완료');)이 이벤트 루프의 콜백 대기열로 푸시됩니다.
  4. 이벤트 루프는 동기 코드 실행이 완료된 후 콜백을 처리합니다.

이벤트 루프를 사용하면 작업을 시스템에 위임하고 결과를 비동기식으로 처리함으로써 Node.js가 단일 스레드임에도 불구하고 한 번에 많은 작업을 효율적으로 처리할 수 있습니다.

이벤트 루프마이크로태스크 대기열의 우선순위를 지정하여 작업 실행을 조율하여 주 작업 대기열의 작업으로 이동하기 전에 약속 및 관련 작업이 신속하게 해결되도록 합니다. (매크로 작업).

이 동적 기능을 통해 JavaScript는 단일 스레드 환경에서 복잡한 비동기 동작을 처리할 수 있습니다.

릴리스 선언문 이 글은 https://dev.to/syed_ammar/how-event-loop-work-in-nodejs-4lf4?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3