매크로태스크 큐

Task Queue의 다른 이름입니다. Microtask Queue와 구분하기 위해 Macrotask Queue라고 부릅니다.


두 개의 큐

┌─────────────────────┐
│   Microtask Queue   │  ← 우선순위 높음
└─────────────────────┘

┌─────────────────────┐
│  Macrotask Queue    │  ← 우선순위 낮음
│   (= Task Queue)    │
└─────────────────────┘

뭐가 들어가는가

Microtask QueueMacrotask Queue
Promise.then()setTimeout
async/awaitsetInterval
queueMicrotask()이벤트 핸들러 (click 등)
MutationObserverI/O 작업

실행 순서

console.log("1");

setTimeout(() => console.log("2"), 0);     // Macrotask

Promise.resolve().then(() => console.log("3"));  // Microtask

console.log("4");

출력: 1 → 4 → 3 → 2

1. console.log("1") 실행
2. setTimeout 콜백 → Macrotask Queue에 등록
3. Promise 콜백 → Microtask Queue에 등록
4. console.log("4") 실행
5. Call Stack 비었음
6. Microtask Queue 전부 비움 → "3" 출력
7. Macrotask Queue에서 하나 꺼냄 → "2" 출력

핵심 차이

Call Stack 비었을 때:
1. Microtask Queue 전부 비움 (하나도 안 남을 때까지)
2. Macrotask Queue에서 하나만 꺼냄
3. 다시 1번으로

Microtask가 항상 먼저, 전부 처리됩니다.

CSLOG에서 보기