ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript がスリープしない理由: イベント ループの簡単なガイド

JavaScript がスリープしない理由: イベント ループの簡単なガイド

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-30 03:24:03605ブラウズ

シングルスレッド言語としての JavaScript: JavaScript が一度に 1 つのタスクのみを処理する方法を簡単に説明しますが、イベント ループによりそうではないように見えます

イベント ループの仕組み: イベント ループ プロセスの主要な手順

  • スタック: コール スタックは同期コードを管理します。

  • キュー: コールバック キューには、実行を待っているタスクが保持されます。

  • ループ: イベント ループは、
    の前にスタックが空かどうかを確認します。 タスクをキューからスタックに移動します。

Why JavaScript Never Sleeps: An Easy Guide to the Event Loop

ワークフローの内訳:

最初のコード実行:

console.log('Hi');
$.get('url', function cb(data) {
  console.log(data);
});
console.log('JSConfEU');

  • このコードの実行が開始されると、console.log('Hi') が呼び出しスタックに追加され、コンソールに「Hi」が出力されます。

非同期関数呼び出し ($.get):

  • 次に、$.get('url', function cb(data) { ... }) が見つかります。この関数は、「url」からデータを取得する HTTP リクエストを開始します。

  • メインスレッドをブロックする代わりに、リクエストは Web API 環境 (多くの場合ブラウザの一部) に送信されます。

  • コールバック関数 (cb) は、HTTP リクエストが完了すると実行されるように登録されていますが、すぐには実行されません。 HTTP リクエストは Web API セクションに読み込まれ続け、XHR (XMLHttpRequest) としてマークされます。これは、ネットワーク リクエストを処理する場合に一般的です。

次の同期行に移動:

  • JavaScript は次の行 console.log('JSConfEU') に進み、呼び出しスタックに追加されます。その後、「JSConfEU」がコンソールに出力されます。

イベントループとタスクキュー:

  • すべての同期コードが完了すると、呼び出しスタックは空になり、JavaScript は非同期タスクが完了するまで待機します。

  • HTTP リクエストが完了すると、コールバック関数 (cb) が Web API からタスク キューに移動されます。

  • イベント ループは呼び出しスタックが空かどうかを継続的にチェックし、空の場合、イベント ループはタスクをタスク キューから呼び出しスタックに移動します

コールバック実行:

  • イベント ループがコールバック関数を呼び出しスタックに配置すると、console.log(data); が実行されます。コールバック関数内で、HTTP リクエストから受信したデータをコンソールに出力します。

概要:

このフローは、イベント ループが非同期コードを処理する方法を示します
投稿者:

  • 呼び出しスタックで同期コードを直ちに処理します。

  • Web API で非同期タスクを処理し、完了したらタスク キューに移動します。

  • イベント ループが空の場合にのみタスクを呼び出しスタックに移動できるようにし、ブロックしないコード実行を保証します。

以上がJavaScript がスリープしない理由: イベント ループの簡単なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。