자바스크립트 엔진은 비동기 처리를 제공하지 않지만 비동기 코드는 정해진 함수를 제공하여 활용할 수 있음
그 함수를 API라고 함
예) setTimeout, XMLHttpRequest, fetch
비동기 코드를 처리하는 모듈은 자바스크립트 엔진 외부에 있다
evnet loop, task queue(Macrotask Queue), job queue 등으로 구성
API 모듈은 비동기 요청을 처리 후 태스크 큐에 콜백 함수를 넣음
자바스크립트 엔진은 콜 스택이 비워지면 , 태스크 큐의 콜백 함수를 실행한다
Task Queue(Macrotask Queue)
비동기 처리 함수의 콜백 함수, 비동기식 이벤트 핸들러, Timer 함수(setTimeout(), setInterval())의 콜백 함수가 보관되는 영역으로 이벤트 루프(Event Loop)에 의해 특정 시점(Call Stack이 비어졌을 때)에 순차적으로 Call Stack으로 이동되어 실행된다
Job Queue(Microtask Queue)
Microtask Queue는 Promise나 async/await, process.nextTick, Object.observe, MutationObserver과 같은 비동기 호출을 넘겨받는다
그리고 Microtask의 우선순위는 일반 task(또는 macrotask)보다 더 높다