假设我们有一个 Web Worker 引用一个名为“worker.js”的文件。我们使用worker来执行“worker.js”中的一个函数,该函数执行一些冗长的操作。我们调用将相应的消息发布给工作人员并在主线程中继续。然而,在工作线程完成初始工作之前,主线程会向它发送另一条消息。
我的问题:工作人员是否会继续执行我们的计时功能,并且仅在完成后处理新发布的消息,还是会中断当前操作,直到新消息完成为止?
我已经在 Google Chrome 的调试器中尝试了以下代码:
工人.js:
var cosine;
self.onmessage = function(e) {
if (e.data.message == 0) {
for (var i = 0; i < 10000000; i++) {
cosine = Math.cos(Math.random());
if (i % 1000 == 0) console.log("hello world");
}
} else if (e.data.message == 1) {
console.log("xyz");
}
};
main.js:
var worker;
function main() {
worker = new Worker("js/worker.js");
worker.postMessage({message: 0});
setTimeout(xyz, 10);
}
function xyz() {
worker.postMessage({message: 1});
}
output:
(10000 times) test.js:11 hello world
test.js:14 xyz
每次新迭代都会重新计算余弦变量,以提供问题中描述的“耗时”算法。 显然,只有在最后一个操作完成后才会收到该消息,因为我观察到在第 10000 个“hello world”输出之后立即打印了“xyz”输出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)