如何防止HTML5 Web Workers锁定,从而正确响应来自父级的消息

Ste*_*nou 8 javascript html5 web-worker

我正在使用Web工作人员进行一些CPU密集型工作,但要求工作人员在工作人员仍在处理时响应来自父脚本的消息.

然而,工作人员在处理循环中被锁定时不会响应消息,而我还没有找到一种说明轮询消息队列的方法.因此,似乎唯一的解决方案是以一定间隔中断处理以允许对队列中的任何消息进行服务.

显而易见的选择是使用计时器(比如使用setInterval)但是我已经读过,启动之间的最小延迟很长(http://ajaxian.com/archives/settimeout-delay)这很不幸,因为它会减慢处理速度很多.

其他人对此有何看法?我将尝试onmessage在每个结束时让工作人员自己调度onmessage,从而有效地实现从每个事件收到的处理循环的一个步骤,但只是想知道是否有人对此有任何想法.

谢谢,

小智 6

工人可以产生子工人.您可以让主工作者充当您的消息队列,当它收到长时间运行操作的请求时,会产生一个子工作程序来处理该数据.然后,子工作人员可以将结果发送回主工作程序,以从队列中删除事件并将结果返回给主线程.这样,您的主要工作人员将始终可以自由地收听新消息,并且您可以完全控制队列.

- 缺口

  • 我认为如果必须停止和恢复计算,这将不起作用。我还没有找到解决方案。示例:http://gist.github.com/607058 (2认同)
  • @nciagra,这个答案不起作用:你只是将问题向前推进了一步。那么如果你产生子工人怎么办?现在,这些子工作人员正忙于进行计算,您无法从主工作人员中打断它们。我想[旧的间隔解决方案](/sf/answers/712631531/)(现在在网络工作人员本身内)是我们需要中断工作人员的唯一方法,网络工作人员非常需要真正的中断机制,例如Java可以做到。 (2认同)