14个版本 (5个稳定版)
1.2.1 | 2024年8月7日 |
---|---|
1.2.0 | 2024年1月5日 |
1.1.1 | 2022年3月24日 |
1.0.0 | 2020年4月25日 |
0.2.1 | 2017年7月10日 |
#28 在 操作系统
每月下载量37,263
用于 159 个crate(直接使用62个)
28KB
431 行
spin_sleep
精确休眠。只要可信,就尽可能使用原生休眠,然后自旋。
thread::sleep
的问题在于它并不总是非常精确,而且这种精度因平台和状态而异。自旋尽可能精确,但会不礼貌地消耗CPU。
此库添加了一个折衷方案,使用可配置的原生精度设置,允许thread::sleep等待大部分休眠时间,并在最后一段自旋以保证精度。
SpinSleeper
使用默认原生精度的最简单用法是thread::sleep的替代品。
spin_sleep::sleep(Duration::new(1, 12_550_000));
配置
更高级的用法,包括设置自定义原生精度,可以通过构造一个SpinSleeper
来实现。
// Create a new sleeper that trusts native thread::sleep with 100μs accuracy
let spin_sleeper = spin_sleep::SpinSleeper::new(100_000)
.with_spin_strategy(spin_sleep::SpinStrategy::YieldThread);
// Sleep for 1.01255 seconds, this will:
// - thread:sleep for 1.01245 seconds, i.e., 100μs less than the requested duration
// - spin until total 1.01255 seconds have elapsed
spin_sleeper.sleep(Duration::new(1, 12_550_000));
休眠也可以以f64
秒或u64
纳秒请求(当与time
crate一起使用时很有用)
spin_sleeper.sleep_s(1.01255);
spin_sleeper.sleep_ns(1_012_550_000);
操作系统特定的默认设置对于大多数情况已经足够。
let sleeper = SpinSleeper::default();
Windows精度
Windows(>= Windows 10,版本1803)将使用高分辨率的可等待定时器,类似于rust std >= 1.75中的sleep。
早期版本的Windows默认精度特别差(约15ms),spin_sleep
将自动在Windows上选择最佳精度,通常实现约1-2ms的原生休眠精度。
最低支持的rust编译器
此crate使用最新稳定版rust维护。
依赖项
~0–8MB
~58K SLoC