我正在使用 Web Worker 来执行一些 CPU 密集型工作,但要求 Worker 在处理过程中响应来自父脚本的消息。
然而,工作人员在处理循环中被锁定时不会响应消息,而且我还没有找到轮询消息队列的方法。因此,似乎唯一的解决方案是每隔一段时间中断处理,以允许为队列中的任何消息提供服务。
最明显的选择是使用定时器(比如使用 setInterval),但是我读到两次触发之间的最小延迟非常长(http://ajaxian.com/archives/settimeout-delay),这很不幸,因为它会大大减慢处理速度。
其他人对此有何看法?我将尝试让工作人员在每个 onmessage
结束时将 onmessage
分派(dispatch)给自己,从而有效地实现每个从自己收到的事件的处理循环的一个步骤,但是只是想看看是否有人对此有任何想法。
谢谢,
最佳答案
一个 worker 可以产生子 worker 。你可以让你的主要工作人员充当你的消息队列,当它收到一个长时间运行的操作请求时,产生一个子工作人员来处理该数据。 sub worker 然后可以将结果发送回 main worker 以从队列中删除事件并将结果返回到主线程。这样,您的主要工作人员将始终可以自由收听新消息,并且您可以完全控制队列。
--尼克
关于javascript - 如何防止 HTML5 Web Worker 锁定从而正确响应来自父级的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3177774/