마이크로태스크 큐

Macrotask Queue보다 우선순위가 높은 대기열입니다.


들어가는 것들

Promise.resolve().then(() => {});  // Microtask
async/await                        // Microtask
queueMicrotask(() => {});          // Microtask

주로 Promise 관련 콜백이 들어갑니다.


왜 분리했는가

Promise는 빠른 응답이 필요한 경우가 많습니다.

fetch("/api/user")
    .then(res => res.json())
    .then(data => updateUI(data));  // 빨리 처리해야 함

setTimeout(() => {
    console.log("덜 급한 작업");
}, 0);

Promise 체인이 setTimeout 때문에 밀리면 안 되니까, Microtask를 먼저 처리합니다.


실행 순서

setTimeout(() => console.log("A"), 0);
Promise.resolve().then(() => console.log("B"));
Promise.resolve().then(() => console.log("C"));
setTimeout(() => console.log("D"), 0);

출력: B → C → A → D

Call Stack 비었을 때:
1. Microtask Queue 전부 비움 → B, C 출력
2. Macrotask Queue에서 하나 꺼냄 → A 출력
3. Microtask Queue 확인 (비어있음)
4. Macrotask Queue에서 하나 꺼냄 → D 출력

정리

Microtask QueueMacrotask Queue
예시Promise, async/awaitsetTimeout, 이벤트
우선순위높음낮음
처리전부 비움하나씩 처리

CSLOG에서 보기