이벤트 루프는 Node.js가 여러 비동기 작업을 관리하기 위한 구현체.
(X) => console.log("Hello World")
동기 작업
(O) => file.readFile('file.txt', callback)
비동기 작업
이러한 비동기 작업들을 모아서 관리하고 순서대로 실행할 수 있게 해주는 도구.
이벤트 루프는 JavaScript가 단일 스레드라는 사실에도 불구하고 가능할 때마다 작업을 시스템 커널로 오프로드하여 Node.js가 non blocking I/O 작업을 수행할 수 있도록 합니다.
대부분의 최신 커널은 multi 스레드이기 때문에 백그라운드에서 실행되는 여러 작업을 처리할 수 있습니다. 이러한 작업 중 하나가 완료되면 커널은 적절한 콜백이 polling queue에 추가되어 결국 실행될 수 있도록 Node.js에 알립니다.
<aside> 💡 비동기 작업을 커널 혹은 쓰레드로 위임해서 거기서 처리하게 한 후에 콜백을 poll queue(event loop에서 여러 단계 중 하나)에 더해줍니다. 그리고 콜백을 실행합니다.
</aside>
settimeout
함수가 불러지면 timer라는 페이즈에 있는 큐에 쌓이게 됩니다.
그리고 이 큐는 First in First Out FIFO
먼저 들어온 게 먼저 나가게 되어있습니다.