ajax はマルチスレッドではなくシングルスレッドです。JavaScript はシングルスレッドであり、Ajax は JavaScript カテゴリに属しているため、Ajax はシングルスレッドです。 Ajax を使用してマルチスレッドを実現できる理由は、Web サーバーに依存しており、サーバーはマルチスレッドを使用してリクエストを処理します。
このチュートリアルの動作環境: Windows 7 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。
Ajax はシングルスレッドですか、それともマルチスレッドですか?
まず第一に、明確にしておきます: Ajax はシングルスレッドです。JavaScript はシングルスレッドであり、Ajax は JavaScript のカテゴリに属しているため、Ajax はシングルスレッドです。ねじ切りされた。 Ajax を使用してマルチスレッドを実現できる理由は、Web サーバーに依存しており、サーバーはマルチスレッドを使用してリクエストを処理します。
それでは、はっきりさせておきますが、ブラウザはマルチプロセスです。図に示すように、Google Chrome でタブページを開くたびに、子プロセスが存在します。
JS はブラウザ内で実行されるため、シングルスレッドです。各ウィンドウには JS スレッドがあります。シングルスレッドであるため、特定のスレッドのみが存在します。特定の瞬間にコードが実行され、他のコードがブロックされる可能性があります。
Ajax は非同期ですか?
Ajax リクエストは確かに非同期です。js エンジンは待たずに非同期コードを実行します。これは、メッセージ キュー と イベント ループがあるためです。このリクエストはそれを実行します。ブラウザによって新しいスレッドを開くように要求されます。ブラウザの動作の多くは非同期です。非同期イベントが発生すると、イベント キューに入ります。ブラウザには内部に大規模なメッセージ ループであるイベント ループがあり、大規模なイベント キューをポーリングしてイベントを処理します。このイベントは実行されるだけです。前の処理が完了し、イベントがアイドル状態になった後、JavaScript エンジンは常に単一スレッドでコールバック関数を実行します。
結論:
Ajax リクエストは確かに非同期です。このリクエストは、新しいスレッド リクエストを開くためにブラウザによって行われます。イベントがコールバックされると、イベント ループのシングル スレッドに投入され、処理を待機しているイベント キュー。
メッセージ キューには、非同期タスクの登録時に追加したコールバック関数が含まれており、メイン スレッドが AJAX リクエストを開始した後、他のコードの実行を継続します。 AJAX スレッドは URL のリクエストを担当します。応答を取得した後、応答を JavaScript オブジェクトにカプセル化し、メッセージを構築します:
// ajax请求 $.ajax(url, function(resp) { console.log('我是响应:', resp); }); // 消息队列中的消息就长这个样子 var message = function () { callbackFn(response); } // 其中的callbackFn就是前面代码中得到成功响应时的回调函数。
メインスレッドが現在のループ内のすべてのコードを実行した後, メッセージを受信します キューはこのメッセージを取り出して実行します この時点でワーカースレッドからメインスレッドへの通知が完了し、コールバック関数が実行されます。メインスレッドが最初にコールバック関数を提供しない場合、AJAX スレッドは HTTP 応答を受信した後にメインスレッドに通知する必要がなく、メッセージキューにメッセージを入れる必要もありません。 このうち、非同期処理のコールバック関数は、今回のイベントループ内で実行してはなりません。
[関連チュートリアルの推奨事項: AJAX ビデオ チュートリアル]
以上がajaxはマルチスレッドですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。