js のイベント ループJavaScript はシングルスレッドなので、同じイベントで実行できるメソッドは 1 つだけなので、プログラム内のメソッドは実行スタックに追加され、後入れ先出しの順序で実行されます。非同期タスクに遭遇した場合、ブロックされることはありませんが、タスクはイベント キューに配置され、実行スタック内の同期コードは実行され続けます。現在の実行スタック内のすべてのタスクが実行されると、イベント キュー内のタスクが検索され、タスクのコールバック関数が実行スタックに配置され、その中の同期コードが実行されます。この繰り返されるサイクルをイベント ループと呼びます。 ノードNode.jsの機能イベント駆動型コードを上から下まで実行し、コールバックが必要な場合はイベント キューに追加します。メイン スレッドの実行が終了したら、イベント キュー内のコールバックを実行します。プロセス全体では新しいイベントがブロックされることはなく、すでに確立されているイベントを維持する必要もありません。 非ブロッキングIOメインスレッドがアイドル状態になると、イベント キューのループを開始し、イベント キュー内のイベントを処理します。イベントが IO タスクでない場合は、それ自体で処理されます。IO タスクの場合は、スレッド プールに引き渡されて処理され、コールバック関数が指定されます。その後、ループ キュー内の他のイベントが続行されます。ブロッキング操作が完了すると、結果とコールバック関数がキューに配置され、メインスレッドがループするときにコールバック関数が実行されます。 Node.js の長所と短所アドバンテージ
欠点:
適用可能なシナリオ:
Node.js イベントループノード イベント ループは libuv エンジンに依存しています。v8 は js コードを解釈した後、対応するノード API を呼び出します。これらの API は libuv エンジンによって駆動され、対応するタスクを実行し、さまざまなイベントをさまざまなキューに入れて、メイン スレッドの実行を待機します。したがって、ノード イベント ループは libuv エンジンに存在します。 libuvエンジン:イベントループ、ファイル操作などを実装し、非同期を実現するためのnode.jsの中核となる。 node.jsのシングルスレッドは、JavaScriptがシングルスレッドで実行され、内部的にスレッドプールを通じてIO操作が完了することを意味します。 poll (クエリフェーズ) ---》check (チェックフェーズ) ---》close callback (クローズイベントコールバックフェーズ) ---》timer (タイマー検出フェーズ) ---》io コールバックフェーズ ---》アイドルフェーズ ---》ポーリングフェーズ ポーリングフェーズ(ポーリングフェーズ): V8 は js コードを解析して libuv エンジンに渡し、ループは最初にポーリング ステージに入ります。まず、ポーリングキューにイベントがあるかどうかを確認し、ある場合は先入先出順にコールバックを実行します。 JavaScript イベントループのケーススタディに関するこの記事はこれで終わりです。JavaScript イベントループの詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Linux の PHP に XML 拡張機能をインストールする詳細な手順
>>: MySQL で期限切れのデータレコードを定期的に削除する簡単な方法
目次1. Commonjsのエクスポートとrequireの使用1.1 CommonJS エクスポート...
1. SVNサーバーをインストールする yum でサブバージョンをインストール2. SVNバージョン...
序文日常の仕事や勉強では、データベースを操作するときに「不注意」によるミスを犯すことは避けられません...
element-uiを使用する場合、el-popoverというよく使われるコンポーネントがありますが...
NULL が頻繁に使用されるのはなぜですか? (1)Javaのnull Java の NullPoi...
JS のクラスの定義や継承は本当に多様なので、別のノートブックを開いて記録しておきます。意味オブジェ...
目次導入効果原理形状練習するこの記事では、例を使用して、MySQL マスター/スレーブ レプリケーシ...
MySQL データベース インデックスが B+ ツリーを使用する理由をさらに分析する前に、データ構...
学習目標: parseInt() と Number() という 2 つの関数は、文字列をデータ型に変...
1. 自然なレイアウト<br />レイアウトは変更せずに自動的に左揃えになります。 2....
環境ホスト名IPアドレス仕えるプロメテウス192.168.237.137プロメテウス、グラファナノー...
目次1. Vueにおけるwatchの役割はその名の通り、監視の役割です。 2. このオブジェクトのプ...
現在、MySQL を学習中です。私は完全な初心者で、Linux についてはあまり知りません。今後の作...
Linuxにunzipコマンドがない問題の解決策unzipコマンドを使用して.zipファイルを解凍す...
目次1. コンポーネント通信1. Props 親コンポーネント ---> 子コンポーネント通信...