이벤트 루프는 호출 스택이 비워질 때마다 큐에서 콜백 함수를 꺼내와서 실행하는 역할을 해 준다.
ECMA에는 이벤트 루프가 없다
자바스크립트의 표준을 관장하는 ECMA에는 이벤트루프에대한 언급이 없다고 합니다.
그이유는 자바스크립트의 특징인 다양한 런타임때문이라고 합니다.
자바스크릅티는 태생이 웹브라우저환경에서 작동하는언어이기에 웹브라우저 별로 런타임이 상이합니다.
이벤트루프는 이런타임환경과 관련이 있기에 단순히 언어로만 바라보는것이 아니라서 그런것 같습니다.
자바스크립트는 싱글스레드 언어가 아니다
실제 자바스크립트가 구동되는 환경(브라우저, Node.js등)에서는 주로 여러 개의 스레드가 사용되며,
이러한 구동 환경이 단일 호출 스택을 사용하는 자바 스크립트 엔진과 상호 연동하기 위해 사용하는 장치가 바로 '이벤트 루프' 입니다.
Node.js 의 이벤트루프
많은 비동기그림에서 Web API라는 비동기함수 처리구간을 보았을것입니다.아래와같이 말이죠
Node.js는 비동기 IO를 지원하기 위해 libuv 라이브러리를 사용하며, 이 libuv가 이벤트 루프를 제공합니다.
Run-to-Completion
자바스크립트의 함수가 실행되는 방식을 보통 "Run to Completion" 이라고 말합니다.
이는 하나의 함수가 실행되면 이 함수의 실행이 끝날 때까지는 다른 어떤 작업도 중간에 끼어들지 못한다는 의미입니다.
이벤트 루프
이벤트 루프는 '현재 실행중인 태스크가 없는지'와 '태스크 큐에 태스크가 있는지'를 반복적으로 확인하는 것
- 모든 비동기 API들은 작업이 완료되면 콜백 함수를 태스크 큐에 추가한다.
- 이벤트 루프는 '현재 실행중인 태스크가 없을 때'(주로 호출 스택이 비워졌을 때) 태스크 큐의 첫 번째 태스크를 꺼내와 실행한다.
'JavaScript > JavaScript' 카테고리의 다른 글
[Javascript] async & await 비동기처리 (0) | 2022.11.21 |
---|---|
[JavaScript] Promise & async / await 자바스크립트 비동기처리 (1) | 2022.11.21 |
[JavaScript] 실행 컨텍스트 (0) | 2022.11.11 |