在处理大量数据时停止网络工作者?

Stopping a webworker whilst its processing a large amount of data?

我想使用 Web Worker 分块处理图像数据并对图像数据应用过滤器,因为直接在 UI 线程上工作似乎很慢。 (我的问题不是针对宏大计划中的图像数据处理)

在我提出问题解决方案时的主要问题是,如果我要将正在处理的图像拆分成块,然后将该数据发送给 Web Worker,我仍然希望能够取消通过向网络工作者发送另一条消息来处理。我的假设是,如果我使用传统循环(而不是产生的递归函数)来处理数据,那么在该过程完成之前我将无法接收更多消息(否定发送取消消息的用处)。

是这样吗?我还没有尝试过,但我想知道是否值得我以某种方式在网络工作者本身中进一步拆分这些数据,以便它可以继续接收更多消息并处理它们。

如果把它分开是最好的方法,你会如何从本质上让步?我假设这将是某种 1 毫秒的超时,然后允许事件循环处理传入的消息,然后让我的过程函数从它停止的地方开始,但如果这不是这样做的方法,有人可以建议另一个吗?

您可以使用您的主要网络工作者来生成子工作者而不是 "yeilding" ...所以让您为图像处理而产生的主要网络工作者处理来自主要 UI 的两个传入消息线程,以及为图像处理任务创建数据块,并将其发布给自己的子进程。这样你就可以根据来自主 UI 线程的消息轻松终止或管理任何子工作者,并且你的主要网络工作者始终保持响应而不会阻塞,需要某种形式的 "yield",或者等待某个固定的超时时间才能再次响应消息。