2012-03-08 46 views
8

例如webworker本身是多線程嗎?

 

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

而且webwoker裏面,假設有要處理的問題數量會完成data1

+0

你的工作人員執行什麼任務?計算?阿賈克斯? – 2012-03-08 16:23:07

回答

5

單個工人執行其任務隊列,在時間即一個任務之前worker.postMessage(data2)塊。試試下面的例子:

<!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); 
} 

輸出繼電器:

​​

的任務,爲了完成始終,即先緩慢的,那麼一個快。 (如果任務並行執行,第二個任務將首先完成,並有明顯的餘量。)

(只是要明確:調用postMessage始終在其執行上下文中(作爲任何函數調用),但實際上會立即返回「立即「),因爲發佈消息本身的操作非常快,這可能不是你要求的。)

注意:如果您嘗試從本地磁盤加載worker.js,則在Chrome瀏覽器中運行Safari &,Chrome會拋出安全異常。