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 で期限切れのデータレコードを定期的に削除する簡単な方法
データベースをインストールした後、誤ってインストール ウィンドウを閉じたり、長期間 root ユーザ...
目次序文列挙可能なプロパティ反復可能なオブジェクトforEachメソッドとmapメソッドチェーン呼び...
シナリオリクエストが 10 件あるが、同時リクエストの最大数は 5 件で、リクエスト結果が必要である...
目次1. 問題2. 解決策1. オブジェクトをanyとして宣言する2. オブジェクトのインターフェー...
注意: 他のマシン (IP) は、承認なしではクライアント経由で MySQL データベースに接続でき...
Keepalived のインストール: cd <keepalived_sourcecode_p...
先日、外国人の方がHTML+CSSを使ってHamburgerMenuを実装している動画を見ました。最...
この記事の例では、タブ効果を記述するためのJSの具体的なコードを参考までに共有しています。具体的な内...
Docker の作成Docker Compose は、管理対象コンテナをプロジェクト、サービス、コン...
ドメイン名に続くパスがデフォルトの Web ディレクトリではなく、ローカル ディスク上の他のディレク...
序文WeChat アプレットでは、App.js の globalData を中間ブリッジとして使用し...
ウェブサーバー1. Webサーバーは、wev、cgi、asp機能を無効にするなど、不要なIISコンポ...
序文HTTP と HTTPS日常生活でよく使われる URL は、おおまかに次の 2 種類に分けられま...
目次1. 親コンポーネントと子コンポーネント2. テンプレート分離書き込み1. テンプレートタグ2....
目次1. a タグを使用して PDF をプレビューまたはダウンロードします。書き方は、携帯電話でクリ...