イベント ループは、非同期コールバックを管理する Node.js の重要なメカニズムであり、プラットフォームがノンブロッキング I/O 操作を実行できるようにします。イベント ループ動作の 6 つの重要なポイントを詳しく説明します。
- コールスタック
- コールバック登録
- コールバックキュー
- 継続的なモニタリング
- 非同期操作の完了
- 実行フロー
1.呼び出しスタック: JavaScript の呼び出しスタックを理解する:
- コールスタックは、JavaScript コードが実行される場所です。関数が呼び出されると、その関数は呼び出しスタックにプッシュされます。関数の実行が完了すると、スタックからポップされます。
- コール スタックが関数の実行でビジーな場合、イベント ループはコールバック キューをチェックする前にスタックが空になるまで待機します。
2.コールバック登録: 非同期操作の処理方法:
- Web API と Node.js API: 非同期操作 (ファイル読み取り、ネットワーク リクエスト、タイマーなど) が開始されると、対応するコールバックが Web API (ブラウザー内) または Node.js API に登録されます。 (サーバー内).
- 例:
- setTimeout() の場合、タイマーが期限切れになると、コールバックが
関数は実行されるイベント ループに登録されます
マクロタスクキュー内。
- http.get() 経由で行われたネットワーク リクエストの場合、データが
が受信されると、コールバックはキューに入れられます。
処理中です。
3.コールバック キュー: マクロタスクとマイクロタスク:
Node.js は 2 つの主要なタイプのコールバック キューを維持します
- マクロタスク キュー (タスク キュー): このキューは、setTimeout、setInterval、I/O 操作、および時間のかかるその他のタスクなどの操作からのコールバックを処理します。このキュー内のタスクは、すべてのマイクロタスクが処理され、コール スタックが空になった後にのみ実行されます。
- マイクロタスク キュー: このキューには、Promises および process.nextTick() からのコールバックが含まれます。マイクロタスクは優先度が高く、コールスタックが空になった直後、マクロタスクを処理する前に実行されます。
4.イベントループによる継続監視:
- イベント ループはコール スタックとコールバック キューを継続的にチェックして、実行する必要があるタスクがあるかどうかを判断します。これにより、Node.js はメインスレッドをブロックすることなく、複数の非同期操作を同時に処理できるようになります。
5.非同期操作の完了:
非同期操作が完了すると、対応するコールバック関数が適切なキューに追加されます:
- setTimeout() で設定されたタイマーが期限切れになると、関連付けられたコールバックがマクロタスク キューに登録され、現在のスタックとマイクロタスクが処理された後に実行されるのを待ちます。
6.実行フロー: タスクを呼び出しスタックに戻す:
- コール スタックが空の場合、イベント ループは最初にマイクロタスク キュー内のすべてのタスクを処理します。これにより、Promise の解決やその他のマイクロタスクができるだけ早く処理されるようになります。
- すべてのマイクロタスクが完了すると、イベント ループはマクロタスク キューに移動し、一度に 1 つのタスクを実行します。このタスクの実行は、スタックが再び空になるまで継続され、その時点でループがキューをもう一度チェックします。
- タスクが実行されると、呼び出しスタックから削除されます
イベントループの実行例:
console.log('Start');
setTimeout(() => {
console.log('Timeout');
}, 0);
Promise.resolve().then(() => {
console.log('Promise');
});
console.log('End');
出力:
Start
End
Promise
Timeout
この例では:
- 同期ログ ('Start' と 'End') が最初に実行され、呼び出しスタックに追加されます。
- setTimeout コールバックはマクロタスク キューに登録されます。
- Promise が解決され、そのコールバックがマイクロタスク キューに追加されます。
- コール スタックがクリアされた後、イベント ループはマクロタスク キュー ('タイムアウト') に進む前にマイクロタスク キュー ('プロミス') を処理します。
イベント ループは、非同期操作の効率的な管理を可能にする Node.js の中核機能です。コール スタックとコールバック キューを継続的に監視することで、タスクがノンブロッキングな方法で処理されることを保証します。 Web API および Node.js API でのコールバックの登録は、アプリケーションの応答性を維持するための鍵であり、Node.js が多数の同時操作を効率的に処理できるようになります。
以上がNode.js イベント ループのタグの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。