3. What APIs use which async mechanism?
Kernel Async
TCP/UDP server and clients, pipes, dns.sresolveXXX
Thread Pool
fs.*, dns.lookup, pipes
NIX Only
UNIX domain sockets, TTY input, NIX signals
Windows Only
Child Process, TTY input, TCP servers
3
4. How to work on libuv ?
libuv 는 운영체제의 커널을 추상화해서 비동기 API를 지원
libuv 의 비동기 API를 처리 방식
커널이 지원하는 비동기 작업을 libuv 에게 요청하면 libuv 는 대신 커널에
게 이 작업을 비동기적으로 요청
커널이 지원하지 않는 비동기 작업을 libuv 에게 요청하면 livuv 는 내부에
가지고있는 스레드 풀에게 이 작업을 요청
4
5. What is libuv ?
libuv 라는 Asynchronous I/O 라이브러리가 존재하고 Node.js가 이를 내
부적으로 이용합니다.
Node.js는 I/O 작업을 자신의 메인 스레드가 아닌 다른 스레드에 위임함으로
써 Single Thread로 Asynchronous I/O를 지원 합니다.
=> 즉, Node.js는 Asynchronous I/O를 지원하고 그 기반에는 libuv 가 있습
니다.
5
6. Event loop #1
타이머(Timers): setTimeout(),setInterval()에 의해 예약된 콜백 함수 실행
보류 중인 콜백(Pending callbacks): Blocking 작업을 완료한 I/O 콜백 실행
유휴 및 준비 (Idle, prepare): 이벤트 루프에서 사용하는 내부 단계
이벤트 루프는 Node.js가 여러 비동기 작업을 관리하기 위한 구현체입니다.
“
“
6
7. Event loop #2
폴링 (Poll): 새로운 I/O 이벤트를 검색하고 콜백을 실행
처리할 I/O 이벤트가 없는 경우 이벤트 루프는 이 단계에서 Blocking되고
새 이벤트가 도착할 때까지 기다림
확인 (Check): setImmediate()에 의해 예약된 콜백을 실행
콜백 닫기 (Close callbacks): socket.on('close', ...)에 의해 예약된 것과 같
은 콜백 닫기를 실행
7
8. Process #1
Timer Phase -> Pending Callbacks Phase -> Idle, Prepare Phase ->
Poll Phase -> Check Phase -> Close Callbacks Phase -> Timer Phase
한 페이즈(Phase)에서 다음 페이즈로 넘어가는 것을 틱(Tick)이라고 부릅니
다.
“
“
이때 이벤트 루프가 Node.js의 비동기 실행을 도와주는 것과 별개로 싱글 스
레드이므로 한번에 하나의 페이즈에만 진입해 한번에 하나의 작업만 수행할
수 있습니다. Poll Phase 작업을 처리하면서 Check Phase의 작업을 동시
에 처리하거나 Poll Phase의 작업을 한번에 여러 개씩 처리하는 것은 불가능
합니다.
“
“
8
9. Process #2
각 페이즈는 자신만의 큐를 하나씩 가지고 있는데, 이 큐에는 이벤트 루프가
실행해야 하는 작업들이 순서대로 담겨있습니다. Node.js가 페이즈에 진입
을 하면 이 큐에서 자바스크립트 코드(예를 들면 콜백)를 꺼내서 하나씩 실행
한다. 만약 큐에 있는 작업들을 다 실행하거나, 시스템의 실행 한도에 다다르
면 Node.js는 다음 페이즈로 넘어갑니다.
“
“
9
10. Summary
이벤트 루프는 Node.js가 비동기 작업을 관리하기 위한 구현체
이벤트 루프는 총 6개의 페이즈로 구성되어 있으며 한 페이즈에서 다음 페이즈
로 넘어가는 것을 틱이라고 함
각 페이즈는 자신만의 큐를 관리
Node.js는 순서대로 페이즈를 방문하면서 큐에 쌓인 작업을 하나씩 실행
페이즈의 큐에 담긴 작업을 모두 실행하거나 시스템의 실행 한도에 다다르면
Node.js는 다음 페이즈로 전환
이벤트 루프가 살아있는 한 Node.js는 이벤트 루프를 반복
10
12. 참고자료
Morning Keynote- Everything You Need to Know About Node.js
Event Loop - Bert Belder, IBM
Node's Event Loop From the Inside Out by Sam Roberts, IBM
Node.js 이벤트 루프(Event Loop) 샅샅이 분석하기
이벤트 루프 (Event Loop)
12