[javascript] 이벤트 루프의 종류와 동작 방식

이벤트 루프는 자바스크립트에서 비동기 작업을 처리하는 핵심 메커니즘입니다. 이벤트 루프는 작업을 수행하고, 이벤트 및 콜백 함수를 관리하여 비동기 작업을 동기적으로 처리하는 방식으로 동작합니다. 또한, 이벤트 루프는 마이크로태스크 큐와 매크로태스크 큐를 사용하여 작업을 처리합니다.

이벤트 루프의 종류

브라우저 환경의 이벤트 루프

브라우저 환경에서 이벤트 루프는 브라우저가 제공하는 실행 환경에 의해 제어됩니다. 이벤트 루프는 호스팅 환경에 종속적이며, 브라우저에서는 이벤트 루프가 브라우저 엔진에 의해 제어됩니다.

Node.js 환경의 이벤트 루프

Node.js 환경에서의 이벤트 루프는 V8 엔진에 종속적이며, 이벤트 루프에 대한 구현은 Libuv 라이브러리에 기반합니다. 따라서, Node.js 환경에서의 이벤트 루프는 Libuv 라이브러리에 따라 동작합니다.

동작 방식

이벤트 루프는 Call Stack(호출 스택), Callback Queue(콜백 큐), Microtask Queue(마이크로태스크 큐), Task Queue(매크로태스크 큐)를 사용하여 작업을 처리합니다.

Call Stack(호출 스택)

자바스크립트는 기본적으로 싱글 스레드 환경에서 동작하는 언어이기 때문에, 모든 작업은 한 번에 하나씩 처리됩니다. 함수 실행이 이루어지는 곳이며, 함수가 호출될 때마다 호출 스택에 쌓입니다.

function foo() {
  // some code
}

function bar() {
  foo();
}

bar();

Callback Queue(콜백 큐) 및 Task Queue(매크로태스크 큐)

브라우저 환경에서는 Callback Queue(콜백 큐)Task Queue(매크로태스크 큐)가 별도로 관리됩니다. 콜백 함수나 이벤트 핸들러는 해당 큐에 등록되며, 이벤트 루프는 이 큐에 있는 작업을 Call Stack으로 이동시켜 실행합니다.

Microtask Queue(마이크로태스크 큐)

PromiseMutationObserver와 같은 마이크로태스크를 처리하는 큐입니다. 마이크로태스크는 매크로태스크보다 우선순위가 높으며, 이벤트 루프가 Call Stack이 비워졌을 때 즉시 실행됩니다.

이처럼, 이벤트 루프는 큐를 통해 비동기 작업을 처리하고, 작업의 우선순위를 결정하여 적절히 처리합니다.

결론

이벤트 루프는 자바스크립트의 비동기적인 특성을 관리하고, 동작하는 핵심 메커니즘입니다. 이벤트 루프를 이해하고, 태스크 및 마이크로태스크 큐를 적절히 활용하여 비동기 작업을 효율적으로 처리하는 것은 자바스크립트 개발자에게 중요한 역량이 될 수 있습니다.

참조: MDN Web Docs