8
worker.postMessage(data1);
worker.postMessage(data2);
そしてwebwokerの内側に対処すべき課題の量がありますと仮定すると、worker.postMessage(data2)
ブロックdata1
worker.postMessage(data1);
worker.postMessage(data2);
そしてwebwokerの内側に対処すべき課題の量がありますと仮定すると、worker.postMessage(data2)
ブロックdata1
を完了する前に、単一の労働者が一度に、キューにすなわち一つのタスクをそのタスクを実行します。
<!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によってセキュリティ例外がスローされます。
あなたの労働者はどのような仕事をしていますか?計算?アヤックス? –