「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Node.js でのイベント ループはどのように機能しますか?

Node.js でのイベント ループはどのように機能しますか?

2024 年 8 月 24 日に公開
ブラウズ:400

How event loop work in Node.js?

イベント ループは、非同期操作を効率的に処理できるようにする Node.js の中心的な概念です。これがどのように機能するかを簡単に説明します:

1. シングルスレッドの性質

Node.js は単一スレッドで動作します。これは、一度に 1 つのコードしか実行できないことを意味します。ただし、Node.js は、複数のスレッドを必要とせずに多くの操作を同時に処理できるように設計されています。

2. ノンブロッキング I/O

Node.js はノンブロッキング I/O 操作を使用します。 Node.js は、ファイルの読み取り、データベースのクエリ、ネットワーク リクエストの作成などのタスクを実行するとき、これらのタスクの完了を待たずに次のタスクに進みます。代わりに、これらのタスクの処理中に他のコードの実行を継続します。

3. イベントループの仕組み

イベント ループは、コードの実行の管理と非同期イベントの処理を担当します。タスクの「キュー」を継続的にチェックし、どれを実行するかを決定します。段階的な内訳は次のとおりです:

  • Initialize: Node.js アプリケーションが起動すると、初期化され、環境がセットアップされます。
  • 実行フェーズ: Node.js は初期コードを同期的に実行します。非同期タスク (ファイル読み取りや HTTP リクエストなど) がある場合、それらはシステムの API に渡されます。
  • イベント ループ フェーズ: イベント ループには複数のフェーズがあり、各フェーズのタスクを特定の順序で処理します。
    • タイマー フェーズ: setTimeout() および setInterval() によってスケジュールされたコールバックを実行します。
    • IO コールバック フェーズ: ファイル読み取りやネットワーク リクエストなどの I/O 操作のコールバックを実行します。
    • アイドル、準備フェーズ: システム タスクに使用される内部フェーズ。
    • ポーリング フェーズ: 新しい I/O イベントを取得し、そのコールバックを実行します。ポーリング キューが空の場合は、setImmediate() キューにコールバックがあるかどうかを確認します。
    • チェックフェーズ: setImmediate().
    • によってスケジュールされたコールバックを実行します。
    • Close Callbacks Phase:socket.on('close').
    • によって発行されるクローズ イベントなどを処理します。
  • 再確認して終了: イベント ループに処理するタスクがなくなった場合は終了し、プログラムを終了できます。まだ保留中のタスクがある場合は、実行を継続します。

4. コールバックキュー

非同期タスクは完了すると、コールバックをキューにプッシュします。イベント ループはこれらのコールバックをキューから取得し、順番に実行します。

5. マイクロタスクキュー (次のティック)

メイン キューとは別に、process.nextTick() または Promise の .then() ハンドラーでスケジュールされたコールバックがキューに入れられるマイクロタスク キュー (または次のティック キュー) もあります。マイクロタスクは通常のコールバックよりも優先されます。つまり、現在の操作が完了した後、イベント ループが次のフェーズに進む前に実行されます。

イベント ループがどのように機能するかを示す簡単な例を次に示します:

const fs = require('fs');

console.log('Start');

fs.readFile('file.txt', (err, data) => {
  if (err) throw err;
  console.log('File read complete');
});

console.log('End');

出力:

Start
End
File read complete

説明:

  1. console.log('開始');そして console.log('終了');同期的に実行されます。
  2. fs.readFile は、非同期ファイル読み取り操作を開始し、待機せずにコードの次の行の実行を続けます。
  3. ファイル読み取り操作が完了すると、そのコールバック (console.log('File read complete');) がイベント ループのコールバック キューにプッシュされます。
  4. イベント ループは、同期コードの実行が完了した後にコールバックを処理します。

イベント ループを使用すると、操作をシステムに委任し、その結果を非同期で処理することにより、シングルスレッドであるにもかかわらず、Node.js が一度に多くの操作を効率的に処理できるようになります。

イベント ループはタスクの実行を調整し、マイクロタスク キューを優先して、メイン タスク キューのタスクに進む前に Promise と関連操作が迅速に解決されるようにします。 (マクロタスク)。

このダイナミックにより、JavaScript はシングルスレッド環境で複雑な非同期動作を処理できるようになります。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/syed_ammar/how-event-loop-work-in-nodejs-4lf4?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3