[NodeJS]이벤트 루프

Philip Sung·2023년 6월 8일
0

[NodeJS]

목록 보기
4/4
post-thumbnail

01 개요

본 문서에서는 아래에 있는 여러가지 Phase Queue에 따른 이벤트 루프의 실행 순서에 대한 차이에 대해 다룬다. 아래 페이즈는 위에서 아래의 순서로 진행되며, close callbacks페이즈에 이르면 timers 페이즈로 돌아간다.

최종수정일 : 2023.06.08




02 Phase

각각의 페이즈에서 처리하는 일은 다음과 같다.

PHASEMEMBERFUNCTION
timerssetTimeout()
setInterval()
execute callback function if no delay left
pending Callbacks--
idle, prepare--
pollI/Oexecute callback function
checksetImmediate()manually-added callback function
close callbacks--




03 Ordering

입출력 이벤트가 없는 경우
스크립트 내 임의의 위치가 현재의 페이즈일 수 있어 어느 페이즈가 실행되고 있는지 확실하지 않다. 따라서 이러한 경우 timerscheck중 어느 쪽이 먼저 실행될 지는 불확실하다.

입출력 이벤트가 있는 경우
입출력 이벤트가 끝난 경우의 페이즈는 poll에 있으므로, checktimer보다 늘 먼저 실행된다.

nextTick이 있는 경우
nextTick queue는 이벤트 루프 바깥에 존재하며, 해당 큐에 있는 작업은 이벤트루프의 각 페이즈 큐 사이에 실행된다.

03.01 예제

// Execute
setTimeout(() => console.log('timeout'), 0);
setImmediate(() => console.log('immediate'));

process.nextTick(() => {
   setTimeout(() => console.log('timeout2'), 0);
   setImmediate(() => {
   process.nextTick(() => console.log('next tick2'));
   console.log('immediate2');
 });

 console.log('next tick');
});


// Output
next tick
timeout
timeout2
immediate
immediate2
next tick2

STEP 01
timers queue에 setTimeout이(실질적으로 0ms는 1ms로 변경됨), check queue에 setImmediate가, nextTick queue에 nextTick이 등록됨

STEP 02
nextTick이 가장 먼저 실행되고, nextTick 내의 setTimeout과 setImmediate이 각각 큐에 올라감.

STEP 03
이벤트 루프를 돌며 timers queue, check queue가 각각 실행되며, check queue 내의 setImmediate에 있던 nextTick이 마지막에 실행된다.




99 참조자료

(Tistory-Inpa Dev : 이벤트 루프 setTimeout / setImmediate / process.nextTick 차이점)

profile
Philip Sung

0개의 댓글