본문 바로가기

노드

[Node.js] 태스크 큐와 이벤트 큐

반응형

태스크 큐와 이벤트 큐

태스크 큐(Task Queue)와 이벤트 큐(Event Queue)는 비슷한 역할을 하지만 약간 다릅니다.

태스크 큐자바스크립트 엔진이 처리해야 할 작업들을 순서대로 담아놓는 대기열이며, 콜 스택이 비어있을 때 실행됩니다. 대표적으로 setTimeout, setInterval, setImmediate, requestAnimationFrame 등의 비동기 함수가 콜백 함수를 태스크 큐에 넣습니다.

 

반면에 이벤트 큐 Node.js에서의 태스크 큐입니다. 이벤트 루프에서는 태스크 큐와 함께 이벤트 큐도 관리하며, 이벤트 루프가 처리해야 할 작업들을 담아놓습니다. 대표적으로 I/O 작업, 타이머, process.nextTick 등의 비동기 함수가 콜백 함수를 이벤트 큐에 넣습니다.

 

따라서, 노드에서는 태스크 큐와 이벤트 큐를 함께 사용하며, 각각의 큐에서 대기 중인 작업들을 처리합니다.

 

 

***자바스크립트에서는 이벤트 큐가 없는가?

더보기

자바스크립트 언어 자체에서는 이벤트 큐를 제공하지 않습니다. 이벤트 큐는 자바스크립트 런타임 환경에서 제공되는 개념입니다. 보통 브라우저 환경에서는 웹 API와 함께 이벤트 루프를 포함한 런타임 환경이 제공됩니다. Node.js에서도 비슷한 구조로 이벤트 루프와 태스크 큐가 제공됩니다. 따라서 자바스크립트 자체에서는 이벤트 큐를 다룰 수 없지만, 자바스크립트 런타임 환경에서는 이벤트 큐를 이용한 비동기 처리가 가능합니다.

 


process.nextTick

process.nextTick()은 Node.js에서 제공하는 비동기 함수 중 하나로, 현재 실행 중인 작업이 완료된 후 콜백 함수를 호출하는 것이 아니라, 현재 작업이 끝나자마자 바로 콜백 함수를 실행하는 함수입니다.

 

process.nextTick()으로 등록한 콜백 함수는 이벤트 루프의 다음 단계인 I/O 단계, 타이머 단계, 체크 단계를 기다리지 않고, 즉시 실행됩니다. 이러한 특성 때문에, process.nextTick()을 이용하면 콜백 함수를 바로 실행시키는 것이 가능해져서, 이벤트 루프가 다른 태스크를 처리하는 동안에도 콜백 함수를 실행시킬 수 있습니다.

 

즉, process.nextTick()을 이용하면, 이벤트 루프의 다음 사이클에서 실행될 콜백 함수보다도 먼저 실행될 수 있습니다. 이러한 특성 때문에, process.nextTick()을 남용하면 이벤트 루프가 다른 태스크를 처리할 시간이 없어지게 되어, Node.js 서버의 전체적인 성능에 악영향을 줄 수 있으므로, 사용에 주의가 필요합니다.

반응형