我想使用Web Workers以块的形式处理图像数据并对图像数据应用过滤器,因为直接在UI线程上工作似乎很慢。 (我的问题不是特定于宏观方案中的图像数据处理)
当我提出解决我的问题的主要问题是,如果我要分割图像我正在处理成块然后将该数据发送给Web Workers我仍然希望能够取消处理向网络工作者发送另一条消息。我的假设是,如果我使用传统的循环(而不是产生的递归函数)来处理数据,那么在该过程完成之前我将无法接收更多消息(否定发送取消消息的有用性)。
是这样的吗?我还没有尝试过,但我想知道我是否值得以某种方式在Web工作者本身中进一步分割这些数据,以便它可以继续接收更多消息并处理它们。
如果将它拆分是最好的方法,你将如何实现基本上屈服?我假设这将是某种1毫秒的超时,然后允许事件循环处理传入的消息,然后我的进程函数从它停止的地方继续,但如果这不是这样做的方式,有人会建议另一个吗?
答案 0 :(得分:1)
你可以使用你的主要web工作者来产生子工作者而不是“yeilding”......所以让你为图像处理产生的主要web工作者处理来自主UI线程的传入消息,以及创建块它发布给自己的子工作者的图像处理任务的数据。这样,您可以轻松地终止或管理任何子工作者,具体取决于主UI线程中传入的消息,并且您的主Web工作者始终保持响应状态而不会阻塞,需要具有某种形式的“收益”,或者等待一段固定的超时时间才能再次响应消息。