3

在 rust tokio 中,当处理器完成运行队列中的所有任务时,它们是首先查看全局队列以获取更多任务,还是首先尝试从兄弟处理器中窃取工作?

4

1 回答 1

5

鉴于这是未记录的,我认为它是未指定的,并且不是图书馆保证的一部分,除非您可以获得问题或 PR 被接受以指定此行为。我强烈建议不要依赖当前的行为。

话虽如此,“使用代码卢克”是一个短暂的跳跃:主运行循环将是Context::run。当本地队列为空时,它会调用Core::steal_work,它首先开始从同级窃取工作,然后回退到全局队列。

请注意,调度程序会在正常操作期间偶尔尝试从全局队列中弹出任务,介绍工作窃取调度程序的文章指出:

在从本地队列执行约 60 个任务后,处理器将尝试从全局弹出。

于 2020-10-17T12:22:12.037 回答