ホームページ > ウェブフロントエンド > jsチュートリアル > 知っておくべきNode.jsのキューの主な種類

知っておくべきNode.jsのキューの主な種類

Susan Sarandon
リリース: 2025-01-09 14:24:42
オリジナル
585 人が閲覧しました

Top ypes of Queues in Node.js You Should Know

はじめに

Node.js は、ノンブロッキングの非同期アーキテクチャで広く知られており、スケーラブルでパフォーマンスの高い Web アプリケーションにとって理想的な選択肢となっています。この機能の背後にある主な理由の 1 つは、イベント駆動型モデルとイベント ループを介したタスクの効率的な処理です。 Node.js の非同期性を理解するには、このシステムを駆動するキューについて詳しく調べる必要があります。興味深いことに、ブラウザーでは主に 2 つのキューが使用されているのに対し、Node.js ではタスク管理に 6 つの異なるキューが使用されています。これらを詳しく見てみましょう。


Node.js の 6 つのキュー

Node.js には、6 つのキューを使用してタスクを処理する高度なメカニズムがあります。

  1. タイマーキュー

    • 目的: setTimeout と setInterval でスケジュールされたタスクを処理します。
    • :
     setTimeout(() => {
       console.log('Timer task executed');
     }, 1000);
    
    ログイン後にコピー
    ログイン後にコピー
  • タイマー キュー内のタスクは、指定された遅延の後に実行されますが、イベント ループの現在のフェーズが完了する前には実行されません。
  1. I/O キュー (コールバック キュー)

    • 目的: ファイルの読み取りやネットワーク要求の処理など、I/O 関連のタスクを処理します。
    • :
     const fs = require('fs');
    
     fs.readFile('file.txt', 'utf8', (err, data) => {
       if (err) throw err;
       console.log(data);
     });
    
    ログイン後にコピー
  • I/O キューにより、I/O 操作が完了するとコールバックが確実に実行されます。
  1. キューをチェック

    • 目的: setImmediate() を使用してスケジュールされたタスクを実行します。
    • :
     setImmediate(() => {
       console.log('Check Queue task executed');
     });
    
    ログイン後にコピー
  • : チェック キューの優先順位はイベント ループ内で最も低いものの 1 つです。このキュー内のタスクは、I/O フェーズの後に処理されます。
  1. マイクロタスクキュー
    • 目的: 主に Promise やその他のマイクロタスクに関連する、優先度の高いタスクを実行します。
    • サブカテゴリ:
      • a. process.nextTick キュー:
      • process.nextTick() でスケジュールされたタスクを処理します。
      • このキュー内のタスクには最高の優先度が与えられ、他のマイクロタスクよりも前に実行されます。
      • b.他の Promise 用に別のキュー:
      • 解決された Promise に関連するタスクを処理します。
process.nextTick(() => {
           console.log('process.nextTick task executed');
         });
Promise.resolve().then(() => {
           console.log('Promise resolved task executed');
         });
ログイン後にコピー
  • マイクロタスク キューは、イベント ループの次のフェーズに進む前に、常に完了するまで実行されます。
  1. キューを閉じる

    • 目的:socket.on('close') イベントなど、終了操作に関連するタスクを処理します。
    • :
     setTimeout(() => {
       console.log('Timer task executed');
     }, 1000);
    
    ログイン後にコピー
    ログイン後にコピー
  • クローズ キュー内のタスクは、リソースが明示的に閉じられたときに実行されます。

イベント ループがキューに優先順位を付ける方法

Node.js のイベント ループは、タスクを実行するための特定のフェーズ順序に従います。優先順位は次のとおりです:

  1. マイクロタスク キュー (process.nextTick): このキュー内のタスクは常に最初に実行されます。
  2. マイクロタスク キュー (Promises): process.nextTick タスクが完了すると、Promises キュー内のタスクが実行されます。
  3. タイマー キュー: setTimeout または setInterval でスケジュールされたタスクは、このフェーズで処理されます。
  4. I/O キュー: 完了した I/O 操作を処理します。
  5. Check Queue: setImmediate からタスクを実行します。
  6. Close Queue: プロセスはリソースのコールバックを閉じます。

ブラウザとの比較

対照的に、ブラウザにはプライマリ キューが 2 つだけある、より単純なイベント ループ モデルがあります。

  1. マクロ タスク キュー: setTimeout、setInterval、DOM イベントなどのタスクを処理します。
  2. マイクロタスク キュー: Node.js と同様に、このキューは解決された Promises や MutationObserver コールバックなどのタスクを処理します。

Node.js の追加キューにより、より多様なタスクを処理できるようになり、サーバー側アプリケーションにより適したものになります。


重要な洞察

  • SetImmediate と setTimeout:

    • setTimeout がタスクをタイマー キューに追加する間、setImmediate はタスクをチェック キューにキューに入れます。
    • チェック キュー内のタスク (setImmediate 経由) は、現在の I/O フェーズの、setTimeout はタイマー フェーズを待機します。
  • マイクロタスクの優位性:

    • マイクロタスク キュー内のタスク、特に process.nextTick は常に優先され、高優先度の実行が可能になります。
  • 混乱のない同時実行:

    • 個別のキューにより、さまざまな種類のタスクが組織的かつ予測可能な方法で処理され、優先度の低いタスクが枯渇するのを防ぎます。

参照:-

  1. https://frontendmasters.com/courses/servers-node-js/

以上が知っておくべきNode.jsのキューの主な種類の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート