ホームページ >ウェブフロントエンド >jsチュートリアル >Node.jsイベントループ
皆さん、こんにちは
第一回目の今回は、JavaScriptを本気で理解したい人が考えるテーマの一つであるイベントループ(メインループ、メインスレッド、イベントスレッドなど)について書きます。なお、この記事は専門的なものではなく、私が個人的にメモしたものをまとめたものであることを付け加えておきます。私の間違いについては予めお詫び申し上げます。
下の画像には、Nodejs の JavaScript v8 エンジン、イベント ループ メカニズム、および libuv ライブラリが表示されます。 JavaScript では提供できないいくつかのタスクを実行するのは libuv ライブラリです。ブラウザで JavaScript を実行する場合、ブラウザが提供する Web API を使用して処理を実行します。
イベント ループはアーキテクチャ設計パターンです。このアプローチが好まれる理由は、JavaScript の動作原理に直接関係しています。 Javascript はシングルスレッドのノンブロッキング I/O を実行します。つまり、単一スレッドで実行されますが、時間のかかるタスクの実行中にブロックされることはなく、動作し続けます。これはイベント ループ アーキテクチャで解決されます。
プログラムが実行されると、グローバル実行コンテキストが作成され、コール スタックに追加されます。これは、プログラム フローが完了するまでコール スタックから削除されません。実際には、関数ごとに実行コンテキストが作成されます。関数が完了すると、呼び出しスタックから削除されます。しかし、常にそのように機能するとは限りません。
場合によっては、関数が機能を完了するまでに時間がかかることがあります。たとえば、ネットワーク リクエストやファイルからのデータの読み取り/書き込み操作、DOM イベント (すべてではありません)。この場合、関数はスレッド プールまたは Web API によって処理されます。処理が終了すると、コールバックキュー(タスクキュー)にコールバック関数が追加されます。順番が来ると (呼び出しスタックが空になったとき)、呼び出しスタックに転送されて処理されます。処理されると、呼び出しスタックから削除されます。マイクロタスク キュー内のジョブは、コールバック キュー内のジョブよりも前に処理されます。これらの例としては、Promise、Mutation Observer、queueMicrotask
があります。Node.js のスレッド プールとブラウザーの Web ワーカーは、集中的な CPU パワーを必要とする非同期操作やジョブを実行するために使用されます。ここでは、用途や範囲の違いについては触れません。私が言いたいのはこうです。 JavaScript では処理できないタスクを、別のメカニズムを使用して処理できるようにします。
以上がNode.jsイベントループの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。