Back to Topics
基礎の裏側 Reading Time: 5 min
Event Loopと非同期処理
JavaScriptの実行モデルであるシングルスレッドとイベントループの仕組み、Promise/async-awaitの内部挙動を解説します。
Event Loopと非同期処理
JavaScriptは「シングルスレッド」の言語ですが、なぜブラウザ上で高パフォーマンスな非同期処理が可能なのでしょうか?その秘密は イベントループ (Event Loop) にあります。
JavaScriptの実行モデル
JavaScriptの実行環境(V8エンジンなど)は、主に以下の要素で動作します。
- Call Stack: コードが実行される場所
- Task Queue (Macrotask): setTimeout, setInterval などのコールバック
- Microtask Queue: Promise, queueMicrotask などの実行
- Event Loop: スタックが空になったら、キューからタスクをスタックへ移動させる仕組み
優先順位の理解
Microtask Queue は Macrotask Queue よりも 常に優先 されます。
console.log('Start');
setTimeout(() => {
console.log('Timeout (Macrotask)');
}, 0);
Promise.resolve().then(() => {
console.log('Promise (Microtask)');
});
console.log('End');
この実行結果は以下のようになります:
- Start
- End
- Promise (Microtask)
- Timeout (Macrotask)
非同期処理を極めるためのヒント
- ブロッキングを避ける: 重い処理はスタックを占有し、ブラウザの描画を停止させます。
- Promiseの並列実行:
Promise.allを活用して効率的にデータを取得しましょう。
イベントループを理解することで、予期せぬ実行順序やパフォーマンスの低下を防ぐことができるようになります。
Share this Article
Next Stage Explore Roadmap