gpt4 book ai didi

rust - tokio::time::sleep方法是否将任务从运行队列中移出?

转载 作者:行者123 更新时间:2023-12-03 11:36:41 26 4
gpt4 key购买 nike

我一直在寻找tokio源代码来获取问题的答案,并且给人以the sleep method literally puts a timer with duration的印象,但是我认为我可能误解了代码,因为这样做的效率非常低。是否有可能对此有更清晰的了解?

最佳答案

当您等待sleep方法时,会发生两件事:

  • 新计时器插入到Tokio运行时中的计时器轮中。
  • 任务产生给执行者。这使任务脱离运行队列。

  • 在轮询运行于其上的任务之间,Tokio运行时将同时检查epoll的IO事件和计时器轮的计时器事件。每当发生此类事件时,Tokio运行时都会唤醒关联的任务,从而将该任务放回到运行队列中。
    当没有任务准备运行时,Tokio将通过阻止epoll事件进入休眠状态。此 sleep 的超时时间等于计时器轮中的最小计时器,允许Tokio在计时器经过后唤醒该任务。
    计时器轮是一种数据结构,可让您高效地访问最小的计时器,例如二进制堆,但是如果取消了计时器,则允许删除计时器。

    关于rust - tokio::time::sleep方法是否将任务从运行队列中移出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64643662/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com