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

标签 javascript html web-worker

我正在使用 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/

相关文章:

javascript - 模式顺序在 Node.JS 中重要吗?

javascript - 除了字符串/数组,数组是什么?

javascript - 如何停止自动重定向到另一个网页的html按钮

php - 下拉和输入搜索框。不搜索数据库并提取 0 个结果

javascript - 在 JavaScript 的 Web Worker (worker.js) 中创建图像

javascript - 计算数组中多个对象的属性

javascript - AngularJS 为每个选择不同的

php - 编写多语言网站 : the webdesigner's (best) options

javascript - 将元素 (SVG) 传递给网络 worker

javascript - 创建一个传递匿名函数的 Javascript Worker