내부 동작 원리

  1. V8에는 Event loop가 없다.

    1. nodeJs나 브라우져에서 관리한다.

  2. Event Loop는 여러개의 Queue로 이루어져있다.

    1. Timer (setTimeOut, setInterval )

    2. I/O callback

    3. idle ( 매 Tick 마다 실행 )

    4. poll ( 새로운 커넥션, 데이터 등)

    5. check ( setImmediate )

    6. close ( socket)

setTimeout(() => {
    console.log('setTimeout')
}, 0);
setImmediate(() =>{
    console.log('setImmediate')
})
setTimeout(() => {
    console.log('setTimeout')
}, 0);

// 1번
// setTimeout
// setImmediate
// setTimeout

// 2번
// setImmediate
// setTimeout
// setTimeout

1번과 2번 어떤 것이 맞을 거 같은가???

정답은 둘다이다. EventLoop의 타이밍에 맞게 출력된다.

  • EventLoop가i/O callback Queeue 전에 있으면 setTimeout이 먼저 실행되고, i/O callback Queeue 을 막 지난 상태면, Check Queue가 실행되기에 setImmediate가 먼저 실행된다.

https://evan-moon.github.io/2019/08/01/nodejs-event-loop-workflow/

Last updated

Was this helpful?