나만보는개발공부블로그

Event loop - 2 본문

Javascript&Typescript

Event loop - 2

alexrider94 2021. 2. 17. 23:50

Node.js가 시작되면 event loop를 초기화하고 입력값들을 처리하여 비동기 API를 수행하거나 타이머를 예약하고 process.nextTick()을 호출한다.

 

Event loop의 작업 순서는 다음의 그림과 같다.

 

 각 박스는 이벤트 루프의 단계

각 stage들은 실행할 콜백의 FIFO구조의 Queue를 가지고 있다. 이벤트루프가 각 stage에 들어가게 될때 해당 stage의 명시된 작업을 수행하고 Queue가 비어지거나 최대 제한 콜백 갯수까지 도달할때까지 해당 stage에서 콜백을 실행한다. 그래서 콜백 제한이나 큐가 비어지는 시점에 이벤트 루프는 다음 단계로 이동하게 되고 이러한 과정이 반복된다.

 

또한 각 작업들은 더 많은 작업들을 스케줄링 하거나 poll stage에서 처리되는 새로운 이벤트가 커널에 의해 큐에 추가될 수 있으므로 polling event를 처리되는동안 poll event를 queue에 추가할 수 있다. 그 결과로 오래 실행되는 콜백은 poll stage가 timer의 한계 시점보다 훨 씬 더 오래 실행되도록 할 수 있다. 

 

- timer : setTimeout()과 setInterval()로 스케줄링한 콜백을 실행

- pending callbacks : 다음 루프 반복으로 연기된 I/O 콜백들을 실행

- idle, prepare: 내부적으로만 사용됨

- poll : 새로운 이벤트를 가져온다. I/O와 연관된 콜백을 실행한다.

- check : setImmediate()콜백을 호출

- close callback : 일부 close 콜백들을 호출 ex) socket.close()

'Javascript&Typescript' 카테고리의 다른 글

Declarative and Imperative programming  (0) 2021.02.21
Closure  (0) 2021.02.19
Event loop - 1  (0) 2021.02.16
Functional Programming  (0) 2021.02.11
[JS] for & forEach & map  (0) 2021.02.06