取消单个Webworker事件

dro*_*nus 7 javascript web-worker

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

在另一方面,它似乎没用创建一个新Worker的每一项任务,如果他们在大量的公共数据,即必须从走过的操作Worker,以Worker通过主脚本,克隆整个数据每次.

bul*_*ley 5

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

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

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


Tsc*_*cka 1

如果通过 postmessage 将标志 x 设置为 \xe2\x80\x99pause\xe2\x80\x99 特定处理作业,则您\xe2\x80\x99将需要在工作人员中编写代码,直到通过 postmessage 发出绿灯,您需要让您的代码重新开始处理。

\n\n

糟糕的是 javascript 不支持指针,否则你不会遇到内存问题。

\n