[解決済み】なぜJavaScriptはマルチスレッドをサポートしないのですか?
質問
これは意図的な設計上の決定なのでしょうか、それとも現在のブラウザの問題で、今後のバージョンで修正されるのでしょうか?
解決方法は?
ブラウザの JavaScript インタプリタがシングルスレッドであるため、JavaScript はマルチスレッドをサポートしていません (AFAIK)。Google Chromeでさえ、1つのウェブページのJavaScriptを同時に実行させません。これは、既存のウェブページに大規模な並行処理の問題を引き起こすからです。Chromeは複数のコンポーネント(異なるタブ、プラグインなど)を別々のプロセスに分離しているだけで、1つのページが複数のJavaScriptスレッドを持つとは想像できません。
しかし、提案されたように、使用することができます。
setTimeout
を使用すると、ある種のスケジューリングと「偽の」同時並行性が可能になります。これにより、ブラウザはレンダリング スレッドの制御を取り戻し、JavaScript コードを
setTimeout
を指定したミリ秒後に実行します。これは、ビューポート(目に見えるもの)に対する操作の実行中に、ビューポートを更新させたい場合に非常に便利である。例えば座標をループして、それに応じて要素を更新するだけでは、開始と終了の位置が表示されるだけで、その間に何も表示されません。
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/
関連
-
[解決済み】WebpackとBabelで「このファイルタイプを扱うには適切なローダーが必要な場合があります。
-
[解決済み】このオブジェクトの "forEach "はなぜ関数でないのですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] (a== 1 && a ==2 && a==3) が真に評価されることはあるのでしょうか?
-
[解決済み】なぜHTMLは "chucknorris "を色と見なすのか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Uncaught TypeError: nullのプロパティ'value'を読み取ることができない
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み】未定義のプロパティ 'bind' を読み込めない。React.js【重複あり
-
[解決済み】XMLパースエラー:ルート要素が見つからない コンソールの場所 FF
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。
-
[解決済み】react router v^4.0.0 Uncaught TypeError: 未定義のプロパティ'location'を読み取れない
-
[解決済み】中央値の計算 - javascript
-
[解決済み] indexedDBはHTML5のローカルストレージと概念的にどう違うのですか?
-
[解決済み】JavaのThread.sleep()に相当するJavaScriptは何ですか?[重複しています]。
-
[解決済み] JavaScriptとスレッド