【发布时间】:2023-02-03 14:25:11
【问题描述】:
我正在创建多个工作线程,在我的例子中,我正在尝试创建 2:
这是我创建工作线程的代码
function createWorker(data1, data2) {
return new Promise((resolve) => {
let worker = new Worker();
worker.postMessage(data1, data2);
worker.onmessage = (event) => {
postMessageRes = event.data;
if (postMessageRes == 200) {
// loadCOPC();
} else {
workerCount += 1;
let position = postMessageRes[0];
let color = postMessageRes[1];
for (let i = 0; i < position.length; i++) {
positions.push(position[i]);
colors.push(colors[i]);
}
resolve(true);
}
};
});
}
并在我的循环中使用它
for (let m = 0; m < keyCountMap.length; ) {
let remaining = totalNodes - doneCount;
let numbWorker = Math.min(chunk, remaining);
for (let i = 0; i < numbWorker; i++) {
promises.push(createWorker([keyCountMap[m], keyCountMap[m + 1]]));
m += 2;
}
Promise.all(promises).then((response) => {
console.log("one chunk finishes");
});
}
如果我而不是所有这些使用一个静态工作线程并在循环中仅调用一个 postMessage 但不是在我尝试像代码中的此处那样制作块时,代码工作正常。
当我运行代码时,我的浏览器冻结
【问题讨论】:
标签: javascript worker