70 个版本
0.4.7 | 2024年6月21日 |
---|---|
0.4.4 | 2024年1月18日 |
0.4.2 | 2023年11月24日 |
0.3.52 | 2022年12月5日 |
0.1.0 | 2020年10月26日 |
#697 in 异步
1,768 个月下载量
在 35 个 开源包中使用(28 个直接使用)
26KB
455 行
smolscale
一个全局自动扩展的基于工作平衡的[异步任务]调度器。
什么?又一个执行器?
smolscale
是一个基于 [异步任务] 的 工作平衡 执行器,旨在作为 smol
和 async-global-executor
的直接替代品。它基于这样的想法,即工作窃取,像 async-executor
和 tokio
这样的异步执行器中常见的做法,并不是处理大量小型、相互依赖的工作单元(这是消息传递 futures 的最终结果)的正确算法。相反,smolscale
使用 工作平衡,这是一种在 Erlang 中也找到的方法,其中全局 "平衡器" 线程定期在工作者之间平衡工作,但工作者不会试图从彼此那里窃取任务。这避免了工作窃取调度器在应用于异步任务时产生的非常频繁的窃取尝试。
smolscale
的方法在两种情况下特别出色
- 当 CPU 核心未满负载时:传统的工作窃取针对的是大多数工作者都有工作要做的情况,这只有在满载场景中才是这种情况。然而,当工作者经常醒来又回去睡觉时,会浪费很多 CPU 时间在窃取工作上。在这种情况下,
smolscale
将大大减少 CPU 使用率——一个占用 80% CPU 时间的async-executor
应用程序现在可能只需要 20%。尽管这并不会提高满载吞吐量,但它显着降低了能耗,并在多个线程池竞争 CPU 时间的情况下增加了吞吐量。 - 当发生大量消息传递时:消息传递工作负载通常涉及任务快速醒来又回去睡觉。在一个工作窃取调度器中,这又会使调度器充满窃取请求。与不针对消息传递进行特殊处理的执行器(如
async-executor
)相比,smolscale
可以显着提高吞吐量。
许可证:ISC
依赖关系
~10–43MB
~623K SLoC