後端語言 中階
Node.js Event Loop 的運作機制為何?如何避免阻塞?
Node.js Event Loop
核心概念
Node.js 是單執行緒但非阻塞的,透過 Event Loop 實現非同步 I/O。
Event Loop 六個階段(按順序)
- timers:執行
setTimeout/setInterval的 callback - pending callbacks:執行上輪延遲的 I/O callback
- idle, prepare:內部使用
- poll:擷取新 I/O 事件;執行 I/O callback
- check:執行
setImmediatecallback - close callbacks:執行
socket.on("close")等
微任務(Microtask)優先於下一個階段
Promise.then/queueMicrotask→ 最高優先process.nextTick→ 比 Promise 更高(Node.js 特有)
執行順序範例
process.nextTick → Promise.then → setTimeout → setImmediate
常見阻塞原因與解法
| 問題 | 解法 |
|---|---|
| 同步 CPU 密集運算 | Worker Threads / child_process |
| 大量 JSON parse | 拆分 + setImmediate 讓出控制 |
| 同步 fs 操作 | 改用 fs.readFile(異步) |
面試加分:解釋 process.nextTick 與 Promise.then 的優先級差異,以及為何過度使用 nextTick 可能 starve 其他 callback。
✦ AI 模擬面試
輸入你的答案,AI 即時分析精準度與改進空間
登入後即可使用 AI 評分
