ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript は実際にどのようにしてコールバックを非同期にするのでしょうか?

JavaScript は実際にどのようにしてコールバックを非同期にするのでしょうか?

DDD
リリース: 2024-11-19 14:44:02
オリジナル
552 人が閲覧しました

 How Does JavaScript Actually Make Callbacks Asynchronous?

非同期コールバックの仕組みを調べる

プログラミングの分野では、コールバックは非同期実行において重要な役割を果たします。コールバックが非同期で動作することは広く理解されていますが、この動作の背後にある根本的なメカニズムは多くの人にとって不明のままです。この記事では、コールバック ベースのプログラミングで非同期実行を可能にする構文と実装の詳細について詳しく説明します。

コールバック構文: 暗黙的な指示なし

一般的な考えに反して、関数が非同期で実行されるかどうかを決定する特定の構文要素はありません。または同期的に。コールバックは、次の場合に示すように、どちらのモードでも機能します。

非同期:

setTimeout(function(){
    console.log("this is async");
}, 100);
ログイン後にコピー

同期:

an_array.forEach(function(x){
    console.log("this is sync");
});
ログイン後にコピー

お披露目非同期実行

JavaScript 自体には、関数の非同期実行のための固有のメカニズムがありません。この動作を実現するには、次の 2 つのアプローチのいずれかを実行できます。

  1. setTimeout や Web ワーカーなどの外部非同期関数を利用してロジックを処理します。
  2. C レベルに頼る

setTimeout などの C コード関数は、非同期を容易にする高度な技術に依存しています。実行。関与する主なメカニズムはイベント ループです。

イベント ループ: 非同期のオーケストレーター

すべての Web ブラウザの中核には、イベント ループ (残り物) があります。インターネットの初期に登場した非同期ネットワーキング プロトコル。このメカニズムにより、ブラウザは追加のスレッドに頼ることなく、複数の I/O リクエストを同時に処理できるようになります。

イベント ループは、select() (または類似のバリアント) として知られる C の重要なシステム コールに依存します。

select (max, readlist, writelist, errlist, timeout)
ログイン後にコピー

select() を使用すると、システムは多数の I/O 操作を同時に監視できます。選択した I/O チャネルのいずれかでデータが利用可能になると、関数が戻り、ブラウザに適切なコールバック実行を開始するよう通知します。

ブラウザの役割と実装

コールバック関数が登録されると、JavaScript インタープリターはそれを保存し、同時に select() 関数を呼び出します。インタープリターが返されると、インタープリターはコールバックを特定の I/O チャネルに関連付け、その実行をトリガーします。

select() により、ブラウザーはタイムアウトを通じてコールバックの呼び出しタイミングを制御することもできます。 select() に渡されるタイムアウト引数を細心の注意を払って調整することで、コールバックの実行を所定の間隔でスケジュールできます。これは、setTimeout や setInterval などの関数の基礎を形成します。

イベント ループとは別に、Web ブラウザーは Web ワーカーを使用して、別のスレッドでの JavaScript コードの非同期実行を容易にします。ただし、これらのワーカーは、メイン スレッドに通信するために、select() を介してメイン イベント ループと相互接続する必要があります。

Node.js と C スレッド: 別の観点

Node.js は、Web ブラウザと同様に、ファイル/ディスク I/O 操作にスレッドを利用します。これらのタスクが完了すると、スレッドは Node.js イベント ループと通信し、関連するコールバックの実行を促します。

結論非同期の概念コールバックベースのプログラミングの実行は、構文自体からは直接識別できません。これは、基本的なメカニズム、主にイベント ループと、select() などの C レベル関数との相互作用の結果です。イベント ループにより、ブラウザは複数の I/O 操作を同時に処理できるようになり、コールバックのノンブロッキングな実行が保証されます。これらの原則を理解することは、非同期プログラミングとそのさまざまなプラットフォームにわたるアプリケーションの複雑さを理解するために非常に重要です。

以上がJavaScript は実際にどのようにしてコールバックを非同期にするのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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