Javascript 将数据从Web Worker发送到主线程

Javascript 将数据从Web Worker发送到主线程,javascript,concurrency,web-worker,Javascript,Concurrency,Web Worker,我的应用程序产生了一个Web Worker,它处理许多不同的任务,对于计算密集型任务和大数据集,Web Worker产生更多的“子Worker”来使用整个可用的CPU能力,即第一个Worker和子Worker以相等的份额进行处理。完成后,必须使用postMessage()将结果返回到主线程(这在第一个web工作程序中可以正常工作) 主线程Web工作程序2-4个子工作程序 如何将带有可转移数组缓冲区的消息从子工作线程发送到主线程?如果我使用self.postMessage()则消息将发送给第一个

我的应用程序产生了一个Web Worker,它处理许多不同的任务,对于计算密集型任务和大数据集,Web Worker产生更多的“子Worker”来使用整个可用的CPU能力,即第一个Worker和子Worker以相等的份额进行处理。完成后,必须使用
postMessage()
将结果返回到主线程(这在第一个web工作程序中可以正常工作)

主线程Web工作程序2-4个子工作程序
如何将带有可转移数组缓冲区的消息从子工作线程发送到主线程?如果我使用
self.postMessage()
则消息将发送给第一个“Web工作人员”。

您可以将a传递给您的子工作人员。
如果您从未使用过它,我邀请您阅读我的文章,解释此API的基础知识

这里是一个演示,主线程生成MessageChannel,然后主工作线程将发送的MessagePort传递给子工作线程,子工作线程现在可以直接与主线程通信和传输数据

const sub_worker_url=makeWorkerURL(`
onmessage=(evt)=>{
//抓取消息端口
//现在我们可以直接与main进行通信
const port=evt.port[0];
//计算一下
const chunk=新的Uint8Array(256);
加密。获取随机值(块);
//直接将缓冲区发送到main
port.postMessage(chunk,[chunk.buffer]);
};
` );
const main_worker_url=makeWorkerURL(`
onmessage=(evt)=>{
const subworker=new Worker(${sub_Worker_url});
//将MessagePort传输到子工作进程
子worker.postMessage(“,[evt.port[0]]);
};
` );
const main\u worker=新的worker(main\u worker\u url);
//下级员工将通过此频道直接与我们交谈
const channel=new MessageChannel();
//我们在两个端口之一监听
channel.port1.onmessage=({data})=>console.log(“在main中接收”,数据);
//我们把港口转移给工人,
//将其自身转移给子员工
main_worker.postMessage(“,[channel.port2]);
函数makeWorkerURL(内容){
constblob=newblob([content],{type:“text/javascript”});
返回URL.createObjectURL(blob);
}
Main thread <--> Web Worker <--> 2-4 Sub-Workers