10

是否可以取消对由 调用的单个操作的处理worker.postMessage(..)?有worker.terminate()方法,但它取消任何等待事件。postMessage此外,它似乎使整个工人死亡,因为它对进一步的呼叫没有反应。

另一方面,Worker为每个任务创建一个新任务似乎是没有用的,如果它们对大量公共数据进行操作,则必须通过主脚本遍历,Worker每次Worker都克隆整个数据。

4

2 回答 2

5

确实会worker.terminate()杀死线程。由于与 WebWorkers 相关的内存和 CPU 开销相当可观,因此这一事实可能很昂贵。

postMessage处理取消单个事件的方法是在回调中托管某种控制器逻辑。您的工作人员可以拥有状态,因此您必须在内部跟踪该状态并使用该信号量停止或启动进程。

一种方法可能是创建一个共享 Worker,它甚至可以跨选项卡使用,然后让该共享 Worker 句柄在必要时关闭您的其他线程。

于 2012-06-14T21:15:19.057 回答
1

如果通过 postmessage 将标志 x 设置为“暂停”特定的处理作业,直到通过 postmessage 给予绿灯,您需要在您的工作人员中编写代码,您需要为您的代码提供启动以再次开始处理。

糟糕的 javascript 不支持指针,否则不会有内存问题。

于 2012-06-14T21:13:40.880 回答