我们基于 Rust 在 Actix 上构建异步 http 解决方案。 我们生成两个任务:
当第二个任务运行时,它看起来很急切,并且阻止了 1 中的一些小任务的执行。如果我停止 2 个任务,则第一个任务中的所有任务都正确完成。
问题:如何暂时停止或暂停执行第二个任务以完成其他小任务?
异步任务是协作式多任务处理,这意味着你的第二个任务必须
.await
它体内的某些东西,你不能让它从外部停止或暂停。
CPU 密集型任务无论如何都不应该在异步任务中运行,因此最好的选择是不要将审核任务放在任务中。
文档中有一个关于CPU密集型任务主题的专门部分,它建议:
如果您的代码受 CPU 限制,并且您希望限制用于运行它的线程数量,则应使用专用于 CPU 限制任务的单独线程池。例如,您可以考虑使用 rayon 库来执行 CPU 密集型任务。