Event Loop는 Javascript가 비동기작업을 가능하도록 해주는 것.
비동기작업 처리를 위해서 javascript Engine과 Runtime Enviorment간의 통신을 담당하는 런타임환경 구성요소다.
Javascript로 작성된 애플리케이션은 런타임환경의 멀티쓰레드(Multi Thread)를 활용하여 비동기작업을 수행한다.
JS가 런타임환경의 Multi Thread를 어떻게 활용할 수 잇을까?
런타임환경이 제공하는 API와 Event Loop를 이용해 자바스크립트와 런타임 환경이 서로 통신함으로 비동기작업이 가능해 지는 것.
Event Loop가 런타임의 Task Queue와 JS의 Call Stack을 감시함.
Call Stack
- 현재 수행중인 함수들의 목록이 들어있음.
- 이름에서 알 수 있듯 Stack구조로 되어있음.
- 함수의 호출/작업순서를 저장한다.
Task Queue
- 수행되어야할 Callback함수들이 들어있다.
- 실제로 다양한 Task Queue들이 존재한다.
- Task Queue 종류는 런타임 환경마다 다르다.
- 각 Task Queue마다 처리되는 방식이 다르다.