마이크로태스크 큐
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 Queue | Macrotask Queue | |
|---|---|---|
| 예시 | Promise, async/await | setTimeout, 이벤트 |
| 우선순위 | 높음 | 낮음 |
| 처리 | 전부 비움 | 하나씩 처리 |