0

マクロの観点から自分のコードがどのように機能するかを理解しようとしています。

Resig によるWeb ワーカーに関する記事にリンクしているこのSO Questionから、並列プログラミングが可能であることを知りました。

ブラウザの JavaScript はシングル スレッドであると読んだことがあると思っていたので、これはややこしいと思いました。

おそらく私は物事をミスマッチしました。

一部のブラウザはマルチスレッドをサポートしていますか? これは並列処理と似ていますか、それとも相関していますか?

4

2 に答える 2

3

Web ブラウザの JavaScript は、意味的にも動作的にも常にシングル スレッドです。複数の独立した JavaScript スレッドを実行できるようにする「Web ワーカー」と呼ばれる新しい (っぽい) 機能がありますが、それぞれが (いくつかの特定の特殊なケースを除いて) セマンティクスがシングルスレッドのイベントで期待されるものとまったく同じ世界を見ています。駆動環境。

メインの「ページ」スレッドと各ワーカー間の通信は、厳密にメッセージ パッシングを介して行われます。ワーカー (またはページ スレッド) にメッセージを渡すと、イベントがトリガーされます。メッセージを受信するには、イベントを処理する必要があります。

Workers の MDN イントロです。

編集以下のコメントに書いたように、この質問についてはさまざまな考え方があります。ブラウザー (またはその他の JavaScript 環境) は、多数の個別の JavaScript 実行スレッドを同時に実行できます。それは「マルチスレッド環境」ですか?まあ、好きならそう呼んでもいいと思います。ただし、各スレッドの観点からは、他のスレッドについて心配する必要はありません。処理するイベントと、プラットフォーム API (DOM インタラクション、XHR、ワーカーなど) を介して開始するアクションのみがあります。これらの API は同期的であるか、そうでないかのいずれかです。しかし、心配する必要のある同期プリミティブや、他のスレッドとのメモリの共有などはありません。

于 2013-02-12T19:45:24.980 に答える
1

JS がシングル スレッドであると言うのは正しいです。

これが実際に意味することは、ネイティブ オペレーティング システムによってブラウザに割り当てられた 1 つのプロセスによって、記述された JavaScript コードが読み取られ ( parsed)、評価される ( ) ことです。executed

ブラウザーに与えることができるスレッドの数に制限はありませんが、しばらく前までは、すべてのブラウザーが 1 つのスレッドを相互に使用しており、これは安全なアプローチでした (複雑なタイミングの問題とクロススレッド通信を回避しました)。

HTML5 の登場以来、ブラウザ メーカーはWeb Workers.

Web ワーカーが許可するのは、ブラウザーが OS から複数のスレッドを要求し、それらの各スレッドで並列操作を実行することです。

したがって、プロセスが実際に独立して動作できるように、プロセスに依存関係などがないことを確認することは、JS コードを作成する開発者の責任です。

それについては、 HTML5公式サイトを読んでください。ただし、Resig のブログとかなり似ています。

于 2013-02-12T19:54:56.337 に答える