我正在尝试使用网络工作者,并且想知道他们将如何处理令人尴尬的并行问题。因此,我实施了 Connaway 的 Game of Life。(比做模糊或其他事情更有趣。但是在那种情况下问题是一样的。)
目前,我有一个网络工作者执行迭代并为 UI 线程发回新的 ImageData 以放置在我的画布中。效果很好。
然而,我的实验并没有就此结束,因为我有几个可用的 CPU 并且想要并行化我的应用程序。
因此,首先,我将我的数据分成两部分,从中间向下,让两个工人每人处理一半。问题当然是分裂。工人 A 需要来自工人 B 的一列像素,反之亦然。现在,我可以通过让我的 UI 线程将该列交给工作人员来清楚地解决这个问题,但如果我的线程可以直接将它们传递给彼此会更好。
当进一步拆分时,每个工作人员只需要跟踪它的相邻工作人员,并且 UI 线程将只负责更新 UI(应该如此)。
我的问题是,我不知道如何实现这种工人对工人的沟通。我尝试通过初始化 postMessage 将邻居交给彼此,但这会复制我的工作人员而不是传递参考,幸运的是,chrome 警告我这是不可能的。
Uncaught Error: DATA_CLONE_ERR: DOM Exception 25
最后我看到有一个叫做 a 的东西SharedWorker
。这是我应该研究的,还是有办法使用Worker
它来解决我的问题?