본문 바로가기
Front/JavaScript

이벤트 루프 (Event Loop) 정확히 알기 (1)

by Awesome-SH 2021. 10. 15.

자바스크립트의 특징 중 하나는 '단일 스레드' 기반의 언어입니다.

스레드가 하나라는것은 한번에 하나의 작업만 처리할 수 있다는 말이기도 한데 실제로 브라우저에서 자바스크립트가 사용되는 환경을 보면 마치 동시에 처리되고 있는 것처럼 보이게 되는데 (동시성) 어떻게 하나의 작업만을 할 수 있는 단일 스레드인데 '어떻게 동시성'을 지원하는 것일까에 대한 고민으로부터 이 포스팅을 정리해보려고 합니다.

 

브라우저 환경을 그림으로 표현 (https://meetup.toast.com/posts/89)

 

위 이미지에서 보면 비동기 호출을 위해서는 자바스크립트 엔진이 아닌 Web APIs 영역에서 이루어 진다고 표현되어 있다. 이벤트루프, 태스크 큐도 엔진 외부에 위치해 있는 것을 볼 수 있다.

 

 

http://stackoverflow.com/questions/10680601/nodejs-event-loop

 

또한, Node.js는 비동기 작업을 지원하기 위해 libuv 라이브러리를 사용하며 이 라이브러리가 이벤트 루프를 제공한다.

자바스크립트 엔진은 비동기 작업을 위해 Node.js의 API를 호출하여 넘겨진 콜백을 libuv의 이벤트 루프를 통해 스케쥴링되고 실행되게 되는 것이었다.

 

*자바스크립트가 '단일 스레드' 기반의 언어라는 말은 '자바스크립트 엔진이 단일 호출 스택을 사용한다'는 관점에서는 사실이지만 실제 자바스크립트가 구동되는 환경(브라우저 및 NodeJS)에서는 주로 여러 개의 스레드가 사용되며, 이러한 구동 환경이 '단일 호출 스택'을 사용하는 자바스크립트 엔진과 상호 연동하기 위해 사용하는 장치가 곧 '이벤트 루프' 이다.

 

이것으로 이벤트루프(Event Loop)에 대해 살펴보았다.

다음 포스팅에서는 '동시성' 처리를 위한 태스크 큐의 역할과 이벤트루프를 연관지어 포스팅 할 예정이다.

 

 


 

 

Ref.

https://meetup.toast.com/posts/89  

https://webroadcast.tistory.com/12  

 

댓글