我正在试验网络工作者,并想知道他们会如何处理不平行的问题。因此我实施了Connaway's Game of Life。 (要有一点比做模糊更有趣,但是在这种情况下问题会是一样的)如何进行工人与工人的沟通?
目前我有一个Web工作人员执行迭代并发布新的ImageData for UI线程放在我的画布上。很好地工作。
但是,我的实验并没有结束,因为我有几个CPU可用,并且想并行化我的应用程序。
所以,首先简单地说,我将数据分成两部分,中间是两部分,每部分分别处理一半。问题当然是分裂。工作者A需要来自工人B的一列像素,反之亦然。现在,我可以明确地解决这个问题,让我的UI线程将这个列给工人,但是如果我的线程可以直接将它们传递给eachother,那会更好。
当进一步分裂时,每个工作人员只需要跟踪它的邻居工作人员,UI线程只负责更新UI(它应该是)。
我的问题是,我没有看到我如何实现这种工人对工作者的沟通。我尝试通过初始化postMessage将邻居交给海誓山盟,但那会复制我的工作者而不是传递引用,幸运的是,chrome警告我不可能。
Uncaught Error: DATA_CLONE_ERR: DOM Exception 25
最后我看到有一种叫做SharedWorker
的东西。这是我应该看看,还是有办法使用Worker
可以解决我的问题?
感谢您的回答@robertc,我完全忘记了这一点。我想我应该在这上面花点时间。 – Mithon
消息通道如何对工作人员通信有用 –
在Firefox出现此错误消息之前,这将无法使用:https://bugzilla.mozilla.org/show_bug.cgi?id = 911972 – Adria