이벤트 루프는 비동기 콜백을 관리하는 Node.js의 중요한 메커니즘으로, 플랫폼이 비차단 I/O 작업을 수행할 수 있도록 해줍니다. 이벤트 루프 작동의 6가지 핵심 사항을 자세히 설명합니다.
- 콜스택
- 콜백 등록
- 콜백 대기열
- 지속적인 모니터링
- 비동기작업 완성
- 실행 흐름
1. 호출 스택: JavaScript의 호출 스택 이해:
- 호출 스택은 JavaScript 코드가 실행되는 곳입니다. 함수가 호출되면 호출 스택으로 푸시됩니다. 함수 실행이 완료되면 스택에서 제거됩니다.
- 콜 스택이 함수를 실행하는 중이면 이벤트 루프는 콜백 대기열을 확인하기 전에 스택이 빌 때까지 기다립니다.
2. 콜백 등록: 비동기 작업 처리 방법:
- 웹 API 및 Node.js API: 비동기 작업(예: 파일 읽기, 네트워크 요청 또는 타이머)이 시작되면 해당 콜백이 웹 API(브라우저에서) 또는 Node.js API에 등록됩니다. (서버에서).
- 예:
- setTimeout()의 경우 타이머가 만료되면 콜백이
함수는 실행될 이벤트 루프에 등록됩니다.
매크로태스크 대기열에 있습니다.
- http.get()을 통해 이루어진 네트워크 요청의 경우 데이터가
수신되면 콜백이 대기열에 배치됩니다.
처리중입니다.
3. 콜백 대기열: 매크로태스크와 마이크로태스크:
Node.js는 두 가지 기본 유형의 콜백 대기열을 유지합니다
- 매크로태스크 큐(Task Queue): 이 큐는 setTimeout, setInterval, I/O 작업 및 시간이 걸리는 기타 작업과 같은 작업의 콜백을 처리합니다. 이 대기열의 작업은 모든 마이크로태스크가 처리되고 호출 스택이 비어진 후에만 실행됩니다.
- 마이크로태스크 대기열: 이 대기열에는 Promises 및 process.nextTick()의 콜백이 포함됩니다. 마이크로태스크는 우선순위가 더 높으며 매크로태스크를 처리하기 전에 호출 스택이 비어 있는 직후에 실행됩니다.
4. 이벤트 루프를 통한 지속적인 모니터링:
- 이벤트 루프는 호출 스택과 콜백 대기열을 지속적으로 확인하여 실행해야 할 작업이 있는지 확인합니다. 이를 통해 Node.js는 메인 스레드를 차단하지 않고 여러 비동기 작업을 동시에 처리할 수 있습니다.
5. 비동기 작업 완료:
비동기 작업이 완료되면 해당 콜백 함수가 적절한 대기열에 추가됩니다.
- setTimeout()으로 설정된 타이머가 만료되면 관련 콜백이 매크로태스크 대기열에 등록되어 현재 스택 및 모든 마이크로태스크가 처리된 후 실행되기를 기다립니다.
6. 실행 흐름: 작업을 다시 호출 스택으로 이동:
- 호출 스택이 비어 있으면 이벤트 루프는 먼저 마이크로태스크 대기열의 모든 작업을 처리합니다. 이를 통해 약속된 해결 방법 및 기타 세부 작업을 최대한 빨리 처리할 수 있습니다.
- 모든 마이크로태스크가 완료된 후 이벤트 루프는 매크로태스크 대기열로 이동하여 한 번에 하나의 작업을 실행합니다. 이 작업 실행은 스택이 다시 비워질 때까지 계속되며, 이 시점에서 루프는 대기열을 한 번 더 확인합니다.
- 작업이 실행되면 호출 스택에서 제거됩니다
이벤트 루프 실행의 예:
console.log('Start');
setTimeout(() => {
console.log('Timeout');
}, 0);
Promise.resolve().then(() => {
console.log('Promise');
});
console.log('End');
출력:
Start
End
Promise
Timeout
이 예에서는:
- 동기 로그('시작' 및 '종료')가 먼저 실행되어 호출 스택에 추가됩니다.
- setTimeout 콜백은 매크로태스크 대기열에 등록됩니다.
- Promise가 해결되어 마이크로태스크 대기열에 콜백이 추가됩니다.
- 호출 스택이 지워진 후 이벤트 루프는 매크로태스크 대기열('Timeout')로 이동하기 전에 마이크로태스크 대기열('Promise')을 처리합니다.
이벤트 루프는 비동기 작업을 효율적으로 관리할 수 있는 Node.js의 핵심 기능입니다. 호출 스택과 콜백 대기열을 지속적으로 모니터링하여 작업이 차단되지 않는 방식으로 처리되도록 합니다. Web API 및 Node.js API에 콜백을 등록하는 것은 Node.js가 수많은 동시 작업을 효율적으로 처리할 수 있도록 애플리케이션의 응답성을 유지하는 데 핵심입니다.
위 내용은 Node.js 이벤트 루프의 태그의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!