ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScriptにおけるイベントループの解析

JavaScriptにおけるイベントループの解析

不言
リリース: 2019-03-27 09:12:00
転載
1669 人が閲覧しました

この記事の内容はJavaScriptのイベントループの解析に関するものであり、一定の参考価値がありますので、困っている方は参考にしていただければ幸いです。

イベント ループとは何ですか?

公式サイトの説明

JavaScriptにおけるイベントループの解析

私の個人的な理解では、jsのシングルスレッドとは、タスクスタックはシングルスレッドですが、非同期処理を行うということです。 i/o この方法は、処理のためにスレッド プールを開くために libuv に依存することです。完了後、タスクはポーリング キューに追加され、タスク スタックが空になるか、イベントがしきい値に達すると、ポーリング キューとタイマーが追加されます。タスクはタスク スタックに追加され、このループを継続します。これは通常、js のイベント ループです。

構造

   ┌───────────────────────────┐
┌─>│           timers          │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
│  │     pending callbacks     │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
│  │       idle, prepare       │
│  └─────────────┬─────────────┘      ┌───────────────┐
│  ┌─────────────┴─────────────┐      │   incoming:   │
│  │           poll            │<p><strong>timer:</strong><br> スケジュールされたタスクがしきい値に達しても、すぐには実行されず、そのタスクを待機しているタスクによってブロックされます。スタック。 </p><p><strong>保留中のコールバック: </strong><br> このステージでは、特定のシステム操作 (TCP エラー タイプなど) のコールバックを実行します。たとえば、一部の *nix システムは、接続しようとしているときに TCP ソケットを受信した場合、エラーを報告するまで待機する必要があります。これは、保留中のコールバック フェーズで実行するためにキューに入れられます。 </p><p><strong>pull:</strong> <br>このステージには 2 つの主な機能があります: <br> I/O をブロックしてポーリングする時間を計算し、次に <br> ポーリング キュー イベントを処理します。 。 <br> イベント ループがポーリング フェーズに入り、タイマーがスケジュールされていない場合、次の 2 つのうちのいずれかが起こります。 </p><p> ポーリング キューが空でない場合、イベント ループはそれを横断し、それらを同期的に実行します。キューが使い果たされるか、システム依存のハード制限に達するまでコールバックされます。 </p><p>ポーリング キューが空の場合、次の 2 つのうちの 1 つが起こります。 </p><p>スクリプトが setImmediate を実行した場合、イベント ループはポーリング フェーズを終了し、チェック フェーズに進み、これらを実行します。スケジュールスクリプト。 </p><p>スクリプトが setImmediate を実行しない場合、イベント ループはコールバックがポーリング キューに追加されるのを待機し、すぐに実行します。 </p><p>ポーリング キューが空になると、イベント ループがタイマーをチェックします。1 つ以上のタイマーの準備ができている場合、イベント ループはタイマー フェーズに戻り、それらのタイマーのコールバックを実行します。 </p><p><strong>check</strong> <br>このフェーズでは、ポーリング フェーズが完了した直後にコールバックを実行できます。ポーリング フェーズがアイドル状態になり、setImmediate タスクがある場合、イベント ループはコールバックの追加を待つポーリング フェーズでブロックするのではなく、直接ジャンプして実行を確認します。 </p><p>setImmediate は実際には、イベント ループの別のステージで実行される特別なタイマーです。 libuv API を使用して、ポーリング フェーズの完了後に実行されるコールバックをスケジュールします。 </p><p><strong>close コールバック</strong></p><p>ソケットまたはハンドルが突然閉じられた場合 (socket.destroy() など)、この段階で「close」イベントが発行されます。それ以外の場合は、process.nextTick() によって出力されます。 </p><p>この記事はここで終了しました。その他のエキサイティングなコンテンツについては、PHP 中国語 Web サイトの <a href="http://www.php.cn/course/list/17.html" target="_blank">JavaScript ビデオ チュートリアル</a> 列に注目してください。 </p><p><br></p><p> </p>
ログイン後にコピー

以上がJavaScriptにおけるイベントループの解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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