33个版本
0.12.3 | 2024年3月31日 |
---|---|
0.12.2 | 2023年12月31日 |
0.12.1 | 2023年10月31日 |
0.11.1 | 2023年5月28日 |
0.2.0 | 2019年3月10日 |
#51 in 操作系统
1,864,311 每月下载量
在 746 个crate(50个直接) 中使用
69KB
899 行
quanta
quanta 是一个高速计时库,用于快速获取当前时间,以及对其进行操作。
行为准则
注意:所有与该项目相关的对话和贡献都必须遵守 行为准则。
用法
该库的API文档可在 docs.rs/quanta 找到。
一般特性
- 通过时间戳计数器(TSC)计算CPU周期。或者
- 基于TSC(或操作系统回退)获取单调时间,单位为纳秒
- 尽可能降低开销
- 可模拟
- 跨平台
- 有趣、科学性的名字!
平台/架构支持
对于大多数主要平台(Linux、Windows和macOS)以及2008年或之后制造的处理器,您应该没有问题使用 quanta
并提供完整的TSC支持。quanta
如果没有TSC支持,将始终回退到包含的stdlib计时功能。如以下兼容性矩阵所示,这最大的限制是我们只在x86/x86_64平台上支持TSC。
平台 | stdlib回退 | TSC支持? | CI测试? |
---|---|---|---|
Linux (x86/x86_64) | ✅ | ✅ | ✅ |
Linux (MIPS/ARM) | ✅ | ❌ | ✅ |
Windows (x86/x86_64) | ✅ | ✅ | ✅ |
Windows (ARM) | ✅ | ❌ | ❌ |
macOS (x86/x86_64) | ✅ | ✅ | ✅ |
macOS (ARM) | ✅ | ❌ | ❌ |
iOS (ARM) | ✅ | ❌ | ❌ |
性能
quanta
与原生OS时间功能并驾齐驱:与stdlib中的 Clock::now
相比,成本相当甚至更好。
为什么使用这个而不是stdlib?
除了在某些特定情况下具有性能优势之外,能够使用模拟时间使得在实际测试中验证应用程序在涉及时间时是否执行正确变得更加容易。
此外,如一般特性部分所述,quanta
提供了对时间戳计数器访问的安全/薄包装,允许测量代码短段的周期数。这对于准确测量代码性能关键部分可能相关/重要。
替代crate
chrono
:- 基于
std::time::SystemTime
:非单调读取 - 专注于基于时区的“日期/时间”测量,而非区间/经过时间
- 时钟无法进行任何更改(无法暂停,无法进行离散更新)
- 基于
时间
:- 基于
std::time::SystemTime
和std::time::Instant
time::Time
/time::PrimitiveDateTime
使用SystemTime
:非单调读取time::Instant
使用Instant
:单调读取
- 专注于基于时区的“日期/时间”测量,而非区间/经过时间
- 时钟无法进行任何更改(无法暂停,无法进行离散更新)
- 基于
时钟
:- 基于
std::time::SystemTime
:非单调读取 - 时钟可以互换(基于特质的)
- 没有获取时间的自由函数
- 基于
时钟源
:- 基于 TSC 加 OS 回退;非单调读取
- 时钟无法进行任何更改(无法暂停,无法进行离散更新)
- 依赖于不稳定的
asm!
宏和特性标志以启用 TSC - 没有获取时间的自由函数
pausable_clock
:- 基于
std::time::Instant
:单调读取 - 时钟可以暂停(时间可以延迟,但不能进行离散更新)
- 没有获取时间的自由函数
- 基于
许可证
quanta 基于 MIT 许可证。(LICENSE 或 http://opensource.org/licenses/MIT)
依赖项
~0.7–3.5MB
~63K SLoC