e.g。
worker.postMessage(data1);
worker.postMessage(data2);
在webwoker中,假设有大量问题需要处理,worker.postMessage(data2)
会在完成data1
之前阻止
答案 0 :(得分:6)
单个工作人员在队列中执行其任务,即一次执行一项任务。请尝试以下示例:
<!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);
}
输出继电器:
Finished task 1
Finished task 2
任务总是按顺序完成,即首先是慢速任务,然后是快速任务。 (如果任务是并行执行的,则第二个任务将首先以明显的边距完成。)
(只是要明确:调用postMessage总是在其执行上下文中阻塞(作为任何函数调用)但有效地“立即”返回,因为发布消息本身是非常快速的操作。这可能不是你问的。)
注意:如果您尝试从本地磁盘加载worker.js,则Chrome会引发安全性异常,适用于Safari&amp; Firefox浏览器。