如何管理高负载任务以优先处理刚创建的任务?

问题描述 投票:0回答:1

我们基于 Rust 在 Actix 上构建异步 http 解决方案。 我们生成两个任务:

  1. 解析区块链区块。该任务消耗的资源不多,导致块之间有足够的时间进行处理。该任务创建微任务,如“查询数据”、“解析数据”、“保存数据”。
  2. 查看已加载的块。我们不时运行此任务,例如每周一次,但此任务会产生很高的负载。

当第二个任务运行时,它看起来很急切,并且阻止了 1 中的一些小任务的执行。如果我停止 2 个任务,则第一个任务中的所有任务都正确完成。

问题:如何暂时停止或暂停执行第二个任务以完成其他小任务?

asynchronous rust actix-web
1个回答
0
投票

异步任务是协作式多任务处理,这意味着你的第二个任务必须

.await
它体内的某些东西,你不能让它从外部停止或暂停。

CPU 密集型任务无论如何都不应该在异步任务中运行,因此最好的选择是不要将审核任务放在任务中。

tokio

文档中有一个关于CPU密集型任务主题的
专门部分,它建议:

如果您的代码受 CPU 限制,并且您希望限制用于运行它的线程数量,则应使用专用于 CPU 限制任务的单独线程池。例如,您可以考虑使用 rayon 库来执行 CPU 密集型任务。

© www.soinside.com 2019 - 2024. All rights reserved.