🔁
Node.jsイベントループ — ブラウザと異なる6段階フェーズ
timers → pending → idle → poll → check → close、そしてprocess.nextTickの位置
ブラウザのイベントループはシンプル — Task Queue + Microtask Queue。Node.js(libuv)は6つのフェーズを巡回する。
setTimeout vs setImmediate
I/O外:順序が毎回変わる可能性。I/Oコールバック内:常にsetImmediateが先(poll→check順序)。
process.nextTick
全フェーズ遷移間で実行。Microtaskよりも先。多用するとイベントループが次のフェーズに進めない。
優先度:process.nextTick > Promise.then > setTimeout/setImmediate
キーポイント
1
Node.jsイベントループは6フェーズを巡回(libuv)
2
setTimeoutはtimers、setImmediateはcheckフェーズで実行
3
I/Oコールバック内ではsetImmediateが常にsetTimeoutより先
4
process.nextTickは全フェーズ遷移間で実行 — 最優先
ユースケース
サーバーパフォーマンスチューニング — setImmediateでI/O処理後即座コールバック実行
nextTick vs setImmediate選択 — nextTickは緊急、setImmediateは譲歩