Javascript 是否可以在外部暂停/恢复web worker?

Javascript 是否可以在外部暂停/恢复web worker?,javascript,multithreading,threadpool,web-worker,Javascript,Multithreading,Threadpool,Web Worker,我已经看到web workers有一个terminate()函数,但是有没有一种方法可以像中断一样从主机线程暂停和恢复web workers 这个问题的关键因素是,对web worker使用terminate()调用将破坏worker内部的状态(发生的任何操作都可能在半完成状态下被破坏)我正在寻找一种机制,通过这种机制,可以在机器上的几十万个任务之间进行切换,而不丢失这些任务中的状态,也不依赖协作多线程样式(如光纤) 是否可以在外部暂停/恢复web worker 不可以。浏览器javascrip

我已经看到web workers有一个terminate()函数,但是有没有一种方法可以像中断一样从主机线程暂停和恢复web workers

这个问题的关键因素是,对web worker使用terminate()调用将破坏worker内部的状态(发生的任何操作都可能在半完成状态下被破坏)我正在寻找一种机制,通过这种机制,可以在机器上的几十万个任务之间进行切换,而不丢失这些任务中的状态,也不依赖协作多线程样式(如光纤)

是否可以在外部暂停/恢复web worker

不可以。浏览器javascript没有一种方法可以在没有webWorker自身合作的情况下从外部暂停webWorker

解决方案(与webWorker合作)将涉及webWorker运行一段代码,然后允许来自外部世界的消息通知其暂停,然后webWorker自己在收到要恢复处理的消息之前不调用下一个工作单元。但是,因为即使webWorkers是事件驱动的,在您完成所做的事情并返回到事件系统之前,您也无法接收来自外部世界的消息

这可能涉及到执行一大块工作,从现在起只为几毫秒设置一个计时器,允许消息到达,然后当消息到达时,存储新的暂停/恢复状态,然后当计时器启动时,检查状态,如果暂停,则不调用下一个工作单元。如果不是暂停状态,您将执行下一个工作单元,当它完成时,您将在很短的时间内再次执行
setTimeout()
(允许处理任何挂起的消息),并不断重复

不幸的是,这种技术要求您将工作分块,这首先否定了webWorkers的一些好处(尽管您仍然保留使用多个CPU处理工作的好处)

我正在寻找一种机制,通过这种机制,可以在成千上万的任务之间进行切换,而不丢失这些任务中的状态,尽管有多少web Worker与机器上的总内核数相等

您需要让当前运行的每个webWorker进行合作,并允许处理来自外部世界的消息,这样他们就可以看到外部世界何时希望他们停止做更多的工作,然后让他们合作不给下一个工作单元打电话,这样在下一个消息通知他们之前他们不会做任何事情重新开始工作

如果你将拥有数千个这样的网站,你可能不希望他们都是单独的网络工作者,因为这是一个有点沉重的系统。您可能需要一组在工作队列上工作的WebWorker。您将要处理的工作单元排队,每个webWorker从队列中获取下一个工作单元,对其进行处理,然后获取下一个工作单元,依此类推。然后,您的主进程只需向队列输入您希望webWorkers执行的任何工作即可。这还需要将工作划分为适当的工作单元

是否可以在外部暂停/恢复web worker

不可以。浏览器javascript没有一种方法可以在没有webWorker自身合作的情况下从外部暂停webWorker

解决方案(与webWorker合作)将涉及webWorker运行一段代码,然后允许来自外部世界的消息通知其暂停,然后webWorker自己在收到要恢复处理的消息之前不调用下一个工作单元。但是,因为即使webWorkers是事件驱动的,在您完成所做的事情并返回到事件系统之前,您也无法接收来自外部世界的消息

这可能涉及到执行一大块工作,从现在起只为几毫秒设置一个计时器,允许消息到达,然后当消息到达时,存储新的暂停/恢复状态,然后当计时器启动时,检查状态,如果暂停,则不调用下一个工作单元。如果不是暂停状态,您将执行下一个工作单元,当它完成时,您将在很短的时间内再次执行
setTimeout()
(允许处理任何挂起的消息),并不断重复

不幸的是,这种技术要求您将工作分块,这首先否定了webWorkers的一些好处(尽管您仍然保留使用多个CPU处理工作的好处)

我正在寻找一种机制,通过这种机制,可以在成千上万的任务之间进行切换,而不丢失这些任务中的状态,尽管有多少web Worker与机器上的总内核数相等

您需要让当前运行的每个webWorker进行合作,并允许处理来自外部世界的消息,这样他们就可以看到外部世界何时希望他们停止做更多的工作,然后让他们合作不给下一个工作单元打电话,这样在下一个消息通知他们之前他们不会做任何事情重新开始工作


如果你将拥有数千个这样的网站,你可能不希望他们都是单独的网络工作者,因为这是一个有点沉重的系统。您可能需要一组在工作队列上工作的WebWorker。您将要处理的工作单元排队,每个webWorker从队列中获取下一个工作单元,对其进行处理,然后获取下一个工作单元,依此类推。然后,您的主进程只需向队列输入您希望webWorkers执行的任何工作即可。这还需要将工作分成适当的工作单元。

@CoryG-好吧,回答你的问题-JS没有你要求的内置到webWorkers中。我能看到一些困难