ホームページ > 記事 > ウェブフロントエンド > JavaScriptはシングルスレッドですか?
JavaScript はシングルスレッドです。 JavaScript に複数のコアがある場合でも、メイン スレッドと呼ばれる単一のスレッドでのみタスクを実行できます。ブラウザ スクリプト言語としての JavaScript の主な目的は、ユーザーと対話して DOM を操作することです。シングルスレッドでない場合は、複雑な同期の問題。
このチュートリアルの動作環境: Windows 10 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。
ブラウザ スクリプト言語としての JavaScript の主な目的は、ユーザーと対話し、DOM を操作することです。これにより、シングルスレッドのみが可能であることが決まります。そうでない場合は、非常に複雑な同期の問題が発生します。
スレッドは基本的に、プログラムがタスクを完了するために使用できる単一のプロセスです。各スレッドは一度に 1 つのタスクのみを実行できます:
Task A --> Task B --> Task C
各タスクは順番に実行され、次のタスクが開始される前に 1 つのタスクが完了する必要があります。
前述したように、現在では多くのコンピューターに複数のコアが搭載されているため、複数の操作を同時に実行できます。マルチスレッドをサポートできるプログラミング言語は、複数のコアを使用して複数のタスクを同時に完了できます。
Thread 1: Task A --> Task B Thread 2: Task C --> Task D
伝統的に、JavaScript はシングルスレッドです。複数のコアがあっても、メインスレッドと呼ばれる単一のスレッドでのみタスクを実行させることができます。上記の例は次のように実行されます。
Main thread: Render circles to canvas --> Display alert()
時間が経つにつれて、JavaScript はそのような問題を解決するいくつかのツールを獲得しました。 Web ワーカーを使用すると、一部の JavaScript 処理を別のスレッド (ワーカーと呼ばれる) に送信できるため、複数の JavaScript ブロックを同時に実行できます。通常、ユーザーの操作をブロックしないように、ワーカーを使用してメインスレッドで高価なプロセスを実行します。
Main thread: Task A --> Task C Worker thread: Expensive task B
これを念頭に置いて、ブラウザの JavaScript コンソールを再度開き、simple-sync-worker.html を確認してください (リアルタイムで実行されているのを確認するため)。これは、別のワーカー スレッドで 1,000 万の日付を計算した前の例を書き直したものです。これで、ボタンをクリックすると、日付の計算が完了する前にブラウザで段落を表示できるようになります。最初の操作が 2 番目の操作をブロックしなくなりました。
JavaScript 言語の主な機能はシングルスレッドです。これは、同時に 1 つのことしか実行できないことを意味します。では、なぜ JavaScript は複数のスレッドを持てないのでしょうか?これにより効率が向上します。
JavaScript の単一スレッドは、その目的に関連しています。ブラウザーのスクリプト言語としての JavaScript の主な目的は、ユーザーと対話して DOM を操作することです。これにより、シングルスレッドのみが可能であることが決まります。そうでない場合は、非常に複雑な同期の問題が発生します。たとえば、JavaScript に同時に 2 つのスレッドがあるとします。1 つのスレッドは特定の DOM ノードにコンテンツを追加し、もう 1 つのスレッドはノードを削除します。この場合、ブラウザはどちらのスレッドを使用する必要がありますか?
つまり、複雑さを避けるために、JavaScript は誕生以来シングルスレッドであり、これがこの言語の中核機能となっており、今後も変わることはありません。
マルチコア CPU のコンピューティング能力を活用するために、HTML5 は Web Worker 標準を提案しています。これにより、JavaScript スクリプトは複数のスレッドを作成できますが、子スレッドはメインスレッドによって完全に制御され、 DOM の操作は許可されていません。したがって、この新しい標準は JavaScript のシングルスレッドの性質を変更しません。
関連する推奨事項: JavaScript 学習チュートリアル
以上がJavaScriptはシングルスレッドですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。