3 个不稳定版本
使用旧的 Rust 2015
0.2.0 | 2018年2月1日 |
---|---|
0.1.1 | 2016年10月10日 |
0.1.0 | 2016年10月10日 |
#20 在 #wheel
每月35 下载次数
在 rabble 中使用
27KB
488 行
使用方法
将以下内容添加到您的 Cargo.toml
[dependencies]
ferris = "0.1"
将此内容添加到您的 crate 根目录
extern crate ferris;
描述
Ferris 包含两个具体的分层定时器轮。每个轮都有多个具有不同分辨率的内部轮,以最小的内存使用量提供较大的时间范围。
有一个 分配轮 在堆上为每个定时器分配内存,以及一个 复制轮 不这样做。您使用哪个只是您个人喜好和您特定应用中的基准测试的问题。
开始和停止是 O(1) 操作。到期操作是 O(n),其中 n 是槽中的元素数量。
lib.rs
:
分层定时器轮
层次结构中的轮数由传递给具体构造函数 AllocWheel::new()
和 CopyWheel::new()
的 Resolutions 数量确定。每个轮的大小会根据是否可用某些其他分辨率自动确定。例如,如果一个轮由 Resolution::TenMs
和 Resolution::HundredMs
组成,那么 10 毫秒轮中的槽位数将是 10(10 个槽位达到 100 毫秒)。然而,如果未使用 Resolution::HundredMs
,则 Resolution::TenMs
将有 100 个槽位(100 毫秒达到 1 秒)。
为了使定时器正确运行,它必须在最大分辨率处滴答。例如,如果使用 10ms 和 1s 分辨率,则必须每 10ms 调用一次 expire()
。
定时器的最小长度受最高分辨率限制。例如,如果使用 10ms 和 1s 分辨率,定时器的最小长度将是 10ms。
定时器的最大长度受最低分辨率限制。例如,如果使用 10ms 和 1s 分辨率,定时器的最大长度将是 59s。
轮子之间没有迁移。一个定时器分配给单个轮子,并以它最小的分辨率进行调度。例如,如果定时器被安排为1.3秒,它将被安排在2秒后触发。这对粗粒度定时器非常有用,计算效率更高,且比更精确的定时器使用更少的内存。轮子不需要跟踪下一个内部轮子的偏移量以进行轮到轮的迁移,从而节省内存。由于迁移实际上并没有发生,我们节省了CPU资源,并且可能避免了额外的分配。