🔁

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は譲歩