我一直在寻找 tokio 源代码来获取问题的答案,我的印象是sleep 方法实际上放置了一个带有持续时间的计时器,但我认为我可能误解了代码,因为这样做效率非常低。是否可以更清楚地了解这一点?
当您等待该sleep方法时,会发生两件事:
Tokio 运行时将在其上运行的轮询任务之间检查 IO 事件的 epoll 和计时器事件的计时器轮。每当发生此类事件时,Tokio 运行时都会向关联任务发出唤醒信号,将该任务放回到运行队列中。
当没有任务准备运行时,Tokio 将通过阻塞 epoll 事件进入睡眠状态。此睡眠的超时时间等于计时器轮中最小的计时器,允许 Tokio 在计时器到期时唤醒该任务。
计时器轮是一种数据结构,可让您有效地访问最小的计时器,类似于二进制堆,但如果计时器被取消,它允许删除计时器。
| 归档时间: |
|
| 查看次数: |
1879 次 |
| 最近记录: |