2012-03-08 39 views
8

Webワーカー自体はマルチスレッドですか?

 

worker.postMessage(data1); 
worker.postMessage(data2); 
 

そしてwebwokerの内側に対処すべき課題の量がありますと仮定すると、worker.postMessage(data2)ブロックdata1

+0

あなたの労働者はどのような仕事をしていますか?計算?アヤックス? –

答えて

5

を完了する前に、単一の労働者が一度に、キューにすなわち一つのタスクをそのタスクを実行します。

<!DOCTYPE html> 

<script> 

var worker = new Worker('worker.js'); 
worker.postMessage({ task: 1, iterations: 100 }); // very slow task 
worker.postMessage({ task: 2, iterations: 1 }); // very quick task 
worker.onmessage = function(event) { 
    console.log(event.data); 
}; 

</script> 

worker.js:

self.onmessage = function(event) { 
    for (var i = 0; i < event.data.iterations * 1000 * 1000 * 10; i++) {}; 
    self.postMessage("Finished task " + event.data.task); 
} 

出力リレー:次の例を試してみてください

​​

タスクは常に、順番に迅速な1その後、すなわち最初の遅いものを、終了します。 (タスクが並行して実行された場合、2番目のタスクは最初に完全なマージンで終了します)。

(postMessageを呼び出すと常に(その関数の呼び出しとして)実行コンテキスト内でブロックされますが、あなたが尋ねたものではないでしょう)

注:Safari & Firefoxで動作するローカルディスクからworker.jsを読み込もうとすると、Chromeによってセキュリティ例外がスローされます。

関連する問題