coo*_*t29 5 javascript multithreading asynchronous interrupt web-worker
假设我们有一个Web工作者引用一个名为"worker.js"的文件.我们使用worker在"worker.js"中执行一个执行一些冗长操作的函数.我们将相应的消息发布给工作者并在主线程中继续.但是,在工作人员完成初始工作之前,主线程会向其发送另一条消息.
我的问题:工人是否会继续我们的计时功能,只会在完成后处理新发布的消息,还是会中断当前的操作,直到新的消息完成为止?
我已经在Google Chrome浏览器的调试器中尝试了以下代码:
worker.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");
}
};
Run Code Online (Sandbox Code Playgroud)
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});
}
Run Code Online (Sandbox Code Playgroud)
输出:
(10000 times) test.js:11 hello world
test.js:14 xyz
Run Code Online (Sandbox Code Playgroud)
每次新的迭代都会重新计算余弦变量,以提供问题中所述的“耗时”算法。显然,仅在上一次操作完成后才收到该消息,因为我观察到在第10000个“ hello world”输出之后立即打印“ xyz”输出。