2012-03-08 57 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会抛出安全异常。