2012-03-15 11 views
4

JavaScriptはシングルスレッドで動作していますか?グローバル配列を宣言し、AJAXコールバックでそれを変更する(たとえば要素を削除する)と同時に、別の関数(SetTimeOutで呼び出される)で非常に同じ配列を変更し始めると、競合状態になる危険がありますか?JavaScriptはシングルスレッドですか?

私はこのスレッドを見つけました:javascript race condition、誰かが競合条件は常にシングルスレッドとシングルコールスタックで動作するため、javascriptで決して起こらないと言いました。これは、ブラウザの実装方法に依存しますか、またはすべてのブラウザで常にシングルスレッドであることが保証されていますか?

+2

あなたはAJAXで作業している場合、それは単一だからではなく、理由はJavaScript自体の、ネットワークの遅延による競合条件があるかもしれません - スレッド。 – pimvdb

+0

必ずしもそうではありません:http://stackoverflow.com/questions/2734025/is-javascript-guaranteed-to-be-single-threaded – phazei

答えて

4

すべてのブラウザで常にシングルスレッドであることが保証されていますか?

はい。

もちろん、HTTPリクエストのようなものは裏側の別のスレッドで動作するかもしれませんが、JavaScriptコードが実行されるときには、一度に1つのスレッドからしか実行できません。

+0

なぜシングルスレッドの保証? – dldnh

+1

@dldnh http://ja.wikipedia.org/wiki/Global_Interpreter_Lock –

2

JavaScriptはシングルスレッドです。参照ポストが異なるマシン上setTimeoutの違いについて説明し

...


HTML5は、複数の背景スレッドでJavaScriptを実行WebWorkersの概念を導入しています。それは...すべてのブラウザでサポートされていないものの

https://developer.mozilla.org/En/Using_web_workers

http://dev.w3.org/html5/workers/

+0

ウェブワーカーにとっては、1つのマルチスレッドスクリプトを使用するよりも、2つの別々のシングルスレッドスクリプトを実行してお互いにメッセージを送信することに似ています。両方のスレッドで変数を表示することはできません。ワーカーはDOMを操作できません。 –

関連する問題