이벤트 루프는 ‘자바스크립트는 싱글 스레드를 기반으로 동작한다.’라고 불리게 하는 언어의 핵심이며, 프로그램의 렌더링 주기와 콜스택과 밀접한 관련이 있다.
Html Spec에서는 이벤트 루프에 대한 뜻을 명확히 하지 않지만 어디서 사용하는지 나타낸다.
to coordinate events, user interaction, scripts, rendering, networking, and so forth, user agents must use event loops.
이벤트, 사용자의 상호작용, 스크립트, 렌더링, 네트워킹 등을 조정하려면 유저 에이전트는 이벤트 루프를 반드시 사용해야 한다.
여기서 에이전트란 ECMAScript에 정의되어 있는데 그 정의는 다음과 같다.
An agent comprises a set of ECMAScript execution contexts, an excution context stack, a running execution context 에이전트는 ECMAScript의 실행 컨텍스트, 실행 컨텍스트 스택, 동작 중인 실행 컨텍스트를 하나로 통합한 것이다.
다시 말하면 에이전트는 ECMAScript 를 실행하는 실행 컨텍스트를 말하며 그 외의 실행에 필요한 스택 등을 통합하여 부르는 말이다.
자바스크립트가 ECMAScript의 사양을 따르고 있는 언어라는 것을 알고 있다면, 에이전트는 자바스크립트에서 얼마나 중요한 역할을 하는 지 알 수 있다.
다시 말하면 이벤트 루프는 에이전트가 자바스크립트에서 자신의 이벤트, 사용자의 상호작용, 스크립트, 렌더링, 네트워크를 적절히 조정할 때, 사용되는 매커니즘이라고 볼 수 있다.
이벤트 루프는 2가지 종류가 있는데, window event loop, worker event loop가 있다.
Window 객체(브라우저의 전역 객체는 Window 객체이다.)가 있는 브라우저에서 사용되는 이벤트 루프를 말한다. 다른 말로 본다면, 브라우저에서 일어나는 대부분의 일(키 입력, 네트워크 요청 등)은 해당 이벤트 루프에서 처리된다고 볼 수 있다.
Node.js에서의 전역 객체를 보고 싶다면, 다음 자료를 보는 것을 추천한다.
web worker나 service worker에서 사용되는 이벤트 루프를 말하며, 해당 이벤트 루프를 통해서 각 워커들은 비동기 작업을 처리할 때 사용한다. 다시 말하면 워커 스레드는 각 스레드마다 자신만의 이벤트 루프를 하나씩 가지고 있다.
자 그럼 보통 자바스크립트에서 사용되는 Node.js 런타임 환경에 대한 이벤트 루프는 어떠한 종류의 이벤트 루프일까?