JavaScript がマルチスレッドをサポートしないのはなぜですか? 質問する

JavaScript がマルチスレッドをサポートしないのはなぜですか? 質問する

これは意図的な設計上の決定でしょうか、それとも現在のブラウザの問題であり、今後のバージョンで修正されるのでしょうか?

ベストアンサー1

JavaScript はマルチスレッドをサポートしていません。これは、ブラウザの JavaScript インタープリタがシングルスレッドであるためです (AFAIK)。Google Chrome でも、単一の Web ページの JavaScript を同時に実行することはできません。これは、既存の Web ページで大規模な同時実行の問題が発生するためです。Chrome が行うことは、複数のコンポーネント (異なるタブ、プラグインなど) を個別のプロセスに分離することだけですが、単一のページに複数の JavaScript スレッドが存在することは想像できません。

ただし、提案されているように、setTimeoutある種のスケジュール設定と「偽の」同時実行を可能にするために を使用できます。これにより、ブラウザーはレンダリング スレッドの制御を取り戻し、setTimeout指定されたミリ秒数後に指定された JavaScript コードを開始します。これは、ビューポート (表示されるもの) を操作中に更新できるようにする場合に非常に便利です。たとえば、座標をループしてそれに応じて要素を更新すると、開始位置と終了位置のみが表示され、その間は表示されません。

JavaScript の抽象化ライブラリを使用すると、同じ JavaScript インタープリタによって管理されるプロセスとスレッドを作成できます。これにより、次の方法でアクションを実行できます。

  • プロセス A、スレッド 1
  • プロセス A、スレッド 2
  • プロセス B、スレッド 1
  • プロセス A、スレッド 3
  • プロセス A、スレッド 4
  • プロセス B、スレッド 2
  • プロセスAを一時停止
  • プロセス B、スレッド 3
  • プロセス B、スレッド 4
  • プロセス B、スレッド 5
  • プロセスAを開始
  • プロセス A、スレッド 5

これにより、何らかの形のスケジュール設定が可能になり、並列処理、スレッドの開始と停止などが擬似的に行われますが、真のマルチスレッドにはなりません。真のマルチスレッドは、ブラウザーが 1 つのページをマルチスレッド (または複数のコア) で実行できる場合にのみ有用であり、その難しさは追加の可能性よりもはるかに大きいため、言語自体に実装されることはないと思います。

JavaScript の将来については、こちらをご覧ください:https://developer.mozilla.org/presentations/xtech2006/javascript/

おすすめ記事