検索
ホームページ運用・保守安全性JavaScript のシングル スレッドとタスク キューとは何ですか?

1. JavaScript はなぜシングルスレッドで設計されているのですか?

JavaScript 言語の主な特徴は、シングルスレッドであること、つまり一度に 1 つのことしか実行できないことです。

for(var j = 0; j <p>上記のコードは、for ループが実行されるまで実行されません; </p><p>JavaScript の単一スレッドは、その目的に関連しています。ブラウザーのスクリプト言語としての JavaScript の主な目的は、ユーザーと対話して DOM を操作することです。これにより、シングルスレッドのみが可能であることが決まります。そうでない場合は、非常に複雑な同期の問題が発生します。 </p><p> JavaScript に同時に 2 つのスレッドがあるとします。1 つのスレッドは特定の DOM ノードにコンテンツを追加し、もう 1 つのスレッドはノードを削除します。この場合、ブラウザはどちらのスレッドを使用する必要がありますか? </p><p>つまり、複雑さを避けるために、JavaScript は誕生以来シングルスレッドであり、これがこの言語の中核機能となっており、今後も変わることはありません。 </p><p>マルチコア CPU のコンピューティング能力を活用するために、HTML5 は Web Worker 標準を提案しています。これにより、JavaScript スクリプトは複数のスレッドを作成できますが、子スレッドはメインスレッドによって完全に制御されるため、 DOM を操作しないでください。したがって、この新しい標準は JavaScript のシングルスレッドの性質を変更しません。 </p><p>2. タスク キュー</p><p>「タスク キュー」はイベント キュー (メッセージ キューとしても理解できます) であり、IO デバイスがタスクを完了すると、「タスク キュー」に追加されます。 「キュー」 関連する非同期タスクが「実行スタック」に入ることができることを示すイベント。メインスレッドは「タスクキュー」を読み取ります。これは、その中のイベントを読み取ることを意味します; </p><p> 説明しましょう: </p><p>Javascript はシングルスレッドであり、シングルスレッドとは、すべてのタスクが前のタスクが完了するまで、次のタスクは実行されません。前のタスクに時間がかかると、次のタスクも待たされることになります。 </p><p>キューが計算過多によるものである場合、CPU 使用率が高いことは理解できますが、多くの場合、CPU がアイドル状態であるか、使用されていない大きな領域が存在します。これは、IO デバイス (入力) が原因で発生します。および出力デバイス) ) は非常に遅く (たとえば、Ajax 操作はネットワークからデータを読み取ります)、結果が出力されるまで待機した後でのみ実行を続行できます。 </p><p>JavaScript 言語の設計者は、メインスレッドが IO デバイスを完全に無視し、これらの待機中のタスクを一時停止して、後のタスクを最初に実行できることに気づきました。 IO デバイスが結果を返すまで待ってから、保留中のタスクを実行します。 </p><p>したがって、すべてのタスクは、同期タスク (synchronous) と非同期タスク (asynchronous) の 2 つのタイプに分類できます。 </p><p>同期タスクは、メイン スレッドで実行するためにキューに入れられたタスクを指します。次のタスクは、前のタスクが実行された後にのみ実行できます。</p><p>非同期タスクは、メイン スレッドに入ることができないタスクを指します。 「タスクキュー」に入ったタスクは、「タスクキュー」がメインスレッドに非同期タスクの実行が可能であることを通知した場合にのみ、タスクはメインスレッドに入って実行されます。 </p><p>具体的には、非同期実行の動作仕組みは以下のとおりです。 (同期実行についても同様です。非同期タスクがなければ非同期実行とみなされるためです。) </p><p>すべての同期タスクはメインスレッドで実行され、実行スタックを形成します。</p><p>メインスレッドの他に「タスクキュー」もあります。非同期タスクに実行結果がある限り、イベントは「タスク キュー」に配置されます。 </p><p>「実行スタック」内のすべての同期タスクが実行されると、システムは「タスク キュー」を読み取り、その中にどのようなイベントがあるかを確認します。これらの対応する非同期タスクは待機状態を終了し、実行スタックに入り、実行を開始します。 </p><p>メインスレッドは上記の 3 番目のステップを繰り返し実行します。 </p><pre class="brush:php;toolbar:false">for(var j = 0; j <p>//結果 0 1 2 3 4 終了タイムアウト タイムアウト タイムアウト タイムアウト タイムアウト</p>

以上がJavaScript のシングル スレッドとタスク キューとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター