Javascript 如何进行员工之间的沟通?

Javascript 如何进行员工之间的沟通?,javascript,html,web-worker,Javascript,Html,Web Worker,我正在对网络工作者进行实验,我想知道他们在处理令人尴尬的并行问题方面做得如何。因此,我执行了这项决议。(比做模糊之类的事情有趣一点。不过,在这种情况下,问题是一样的。) 目前,我有一个web工作人员在执行迭代,并为UI线程发回新的ImageData以放置在画布中。效果很好 然而,我的实验并没有就此结束,因为我有几个可用的CPU,并且希望并行化我的应用程序 因此,简单地说,我将数据一分为二,从中间开始,让两个工人各自处理一半的数据。问题当然是分裂。辅助对象A需要辅助对象B的一列像素,反之亦然。现在

我正在对网络工作者进行实验,我想知道他们在处理令人尴尬的并行问题方面做得如何。因此,我执行了这项决议。(比做模糊之类的事情有趣一点。不过,在这种情况下,问题是一样的。)

目前,我有一个web工作人员在执行迭代,并为UI线程发回新的ImageData以放置在画布中。效果很好

然而,我的实验并没有就此结束,因为我有几个可用的CPU,并且希望并行化我的应用程序

因此,简单地说,我将数据一分为二,从中间开始,让两个工人各自处理一半的数据。问题当然是分裂。辅助对象A需要辅助对象B的一列像素,反之亦然。现在,我可以通过让我的UI线程将该列下发给工作人员来解决这个问题,但是如果我的线程可以直接将它们传递给彼此,那就更好了

进一步拆分时,每个工作线程只需跟踪其相邻的工作线程,UI线程只负责更新UI(应该是这样的)

我的问题是,我不知道如何实现这种员工之间的沟通。我试图通过初始化后消息的方式将邻居交给对方,但这会复制我的工作人员,而不是传递引用,幸运的是,chrome警告我这是不可能的

Uncaught Error: DATA_CLONE_ERR: DOM Exception 25
最后,我看到了一个叫做
共享工作者的东西。这是我应该研究的,还是有办法使用
工人解决我的问题?

您应该能够使用:

然后在工作线程中:

var xWorkerPort;
onmessage = function(event) {
    if (event.data.code == "port") {
        xWorkerPort = event.ports[0];
        xWorkerPort.onmessage = function(event) { /* do stuff */ };
    }
}

文件不多,但您可以尝试开始。

谢谢您的回答@robertc,我已经完全忘记了这一点。我想我应该花点时间在这上面。在这个bug出现之前,这在Firefox中不会起作用:
var xWorkerPort;
onmessage = function(event) {
    if (event.data.code == "port") {
        xWorkerPort = event.ports[0];
        xWorkerPort.onmessage = function(event) { /* do stuff */ };
    }
}