web-dev-qa-db-ja.com

JavaScriptマルチスレッド

まあ最近JavaScriptはすべてのWeb開発テクノロジーの主要なプレーヤーであり、クライアント側ではユーザーインターフェイスを改善するために、クライアント側のロジックでは、サーバー側のロジックとして一部のWebサーバーでも

それに加えて、人々(少なくとも一部の人々)の事実は、フラッシュからJavaScriptとHTML5へのWebゲーム開発に移行し始めました。

マルチスレッドをサポートする時ではありませんか? JavaScriptをマルチスレッド化できるブラウザはありますか、それとも標準、HTML5、または将来のバージョンにありますか?

10
Ali

マルチスレッドはEcmaScriptでは行われませんが、ホスト環境で公開できます。

古典的な例は WebWorkers です。これにより、バックグラウンドワーカーを起動して、新しいプロセスを生成する方法として<iframe>を悪用することができます。

JavaScriptでのマルチスレッドは必要ありません(例外はありますが、主にグラフィックス関連のプログラムです)。マルチスレッドは必要ありません。すでにGUIのイベントループがあり、グラフィックスレンダリング(キャンバス)はハードウェアアクセラレーションです(つまり、GPUがグラフィックスを並列にレンダリングします)。

webcl のようなプロジェクトはかなりエキサイティングです。

9
Raynos

[〜#〜]いいえ[〜#〜]

マルチスレッディングは、ソフトウェアを正しく機能させるのが最も難しいものの1つです。コードが確定的でない場合に解決するのが非常に難しいコーナーケースが多すぎます。 (私はロックなどのマルチスレッドについて話している)。さらに、さまざまなJavaScriptライブラリはすべて、マルチスレッド化されていないことを前提として構築されています。

そうは言っても、マルチプロセッシングタイプの操作を実行するためのアクターベースのフレームワークを提供するWebワーカーは存在します。ワーカーを作成し、イベントを介してデータをやり取りできます。

編集:もう1つの理由は、JavaScriptが作成されたときに、小さなタスクに使用されることを想定して実行されたため、同時実行性は組み込まれていませんでした。 。 Webワーカーを追加することで、共有メモリなしで同時実行が可能なシステムを作成できましたが、アクターを使用することで、Erlang、Scala、Clojureなどの他の多くの言語で非常に堅牢であることが示されている同時実行のモデル等.

(ロックベースの同時実行が本当に嫌いだと言えない場合)

4
Zachary K

マルチスレッド用にJavaScriptを開くと、解決するよりも多くの問題が発生します。

現在のアーキテクチャはシングルスレッドのイベントベース(つまり、GUIスレッドで実行される頻度が高い)です。つまり、コードのすべてのブロックで、環境の最初から最後まで何も変更されないことを保証できます。コードで。

プリエンプションまたは並列実行を許可するとすぐに、この機能はなくなります。つまり、変更するデータにロックを適用する必要があり、さらに、競合状態をデバッグするのが難しいため、全体を回避する必要があります。

タイムアウトを使用して疑似並列実行することが可能です。これは、実行時間の長い関数をアトミックチャンクに分割し、setTimeout(function(){NeXTSTEP(args);},1);を使用して、必要に応じて他のものを実行できることを意味します

3
ratchet freak

Intelは River Trail をリリースしました。これにより、Javascriptで並列プログラミングが可能になります。ただし、これはFirefoxのみのプラグインであり、このテクノロジーをW3Cに導入するロードマップについて聞いたことがありません。

0
Demian Brecht