Event Loop 이벤트 루프는 node.js가 비동기 이벤트를 관리하고 실행할 수 있게 하는 구현체이다. 이전 글에서 이벤트 루프에 대해 썼는데, 몇몇 단계에 대해 더 깊게 알아보려고 한다. timers Timer phase는 이벤트 루프의 시작을 알리는 페이즈이다. 이 페이즈가 가지고 있는 큐에는 setTimeout이나 setInterval 타이머들의 콜백을 저장하게 된다. 이 부분에서 바로 타이머들의 콜백이 큐에 들어가는 것은 아니며 타이머들은 min heap에 들어가 있게 된다. 힙에 만료된 타이머가 있는 경우 이벤트 루프는 연결된 콜백을 가져와서 타이머 대기열이 비어있을 때까지 지연의 오름차순으로 실행을 시작한다. min heap(최소힙)은 데이터를 이진트리 형태로 관리하며 최소값을 찾아내는데..
Event Loop 이벤트 루프는 Node.js가 여러 비동기 작업을 관리하기 위한 구현체 비동기 작업들을 모아서 관리하고 순서대로 실행할 수 있게 해주는 도구 Event Loop 구조 - 각 박스는 특정 작업을 수행하기 위한 페이즈(phase)를 의미한다. - 그리고 한 페이즈에서 다음 페이즈로 넘어가는 것을 틱 (Tick)이라고 부른다. - 각 단계에서는 각각의 큐가 있다. 예를 들어서 setTimeout() 함수가 불러지면 timer라는 페이즈에 있는 큐에 쌓이게 된다. 그리고 이 큐는 First In First Out으로 먼저 들어온 게 먼저 나가게 되어있다. - 그리고 싱글 스레드이기 때문에 timers 페이즈에 있는 일을 끝내거나 최대 콜백 수가 될 때까지 한 후에 다른 단계로 이동하게 된다...
자바스크립트는 싱글 쓰레드 기반 언어이다. 그럼에도 불구하고 동시성 언어라고 불릴 수 있는 이유는 웹 브라우저가 제공하는 API를 통해 동시에 작업을 할 수 있기 때문이다. 노드JS가 비동기 작업을 처리하는 방법 Node.js는 자바스크립트 언어를 사용하고 자바스크립트 언어는 싱글 스레드이다. 싱글 스레드면 한 번에 하나의 작업만 할 수 있는데 node.js를 사용할 때 어떻게 비동기로 파일을 열고 HTTP request를 보낼 수 있을까? Node.js는 LIBUV 라이브러리에서 제공하는 Event Loop를 이용한다. 어떠한 Task들이 들어오면 Libuv에 있는 이벤트 루프를 이용해서 처리해주고 있다. node.js는 I/O 작업을 libuv에게 위임함으로써 논 블로킹 I/O를 지원하고 그 기반에는..