Mit*_*hon 9 javascript html5 web-worker
我正在尝试网络工作者,并且想知道他们如何处理难以置信的并行问题.因此,我实施了Connaway的生命游戏.(比做一个模糊或其他东西更有趣.但是在那种情况下问题会是相同的.)
目前,我有一个Web工作人员执行迭代并为UI线程发布新的ImageData以放置在我的画布中.很好地工作.
然而,我的实验并没有结束,因为我有几个CPU可用,并希望平行我的应用程序.
因此,首先,我将数据分成两部分,中间部分,然后让两个工人分别处理一半.问题当然是分裂.工人A需要来自工人B的一列像素,反之亦然.现在,我可以通过让我的UI线程将该列提供给工作人员来清楚地解决这个问题,但如果我的线程可以直接将它们传递给彼此,那会更好.
当进一步拆分时,每个工人只需要跟踪它的邻居工作者,UI线程只负责更新UI(应该是这样).
我的问题是,我看不出如何实现这种从工人到工人的沟通.我尝试通过初始化postMessage将邻居交给彼此,但这会复制我的工作人员,而不是放下参考文件,幸运的是,Chrome警告我不可能.
Uncaught Error: DATA_CLONE_ERR: DOM Exception 25
Run Code Online (Sandbox Code Playgroud)
最后我看到有一种叫做a的东西SharedWorker.这是我应该研究的,还是有办法用Worker它来解决我的问题?
您应该能够使用频道消息:
var channel = new MessageChannel();
worker1.postMessage({code:"port"}, [channel.port1]);
worker2.postMessage({code:"port"}, [channel.port2]);
Run Code Online (Sandbox Code Playgroud)
然后在你的工作线程中:
var xWorkerPort;
onmessage = function(event) {
if (event.data.code == "port") {
xWorkerPort = event.ports[0];
xWorkerPort.onmessage = function(event) { /* do stuff */ };
}
}
Run Code Online (Sandbox Code Playgroud)
周围没有太多文档,但您可以尝试使用此MS摘要开始.
| 归档时间: |
|
| 查看次数: |
1008 次 |
| 最近记录: |