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 中使用

Apache-2.0

27KB
488

Build Status

API 文档

使用方法

将以下内容添加到您的 Cargo.toml

[dependencies]
ferris = "0.1"

将此内容添加到您的 crate 根目录

extern crate ferris;

描述

Ferris 包含两个具体的分层定时器轮。每个轮都有多个具有不同分辨率的内部轮,以最小的内存使用量提供较大的时间范围。

有一个 分配轮 在堆上为每个定时器分配内存,以及一个 复制轮 不这样做。您使用哪个只是您个人喜好和您特定应用中的基准测试的问题。

开始和停止是 O(1) 操作。到期操作是 O(n),其中 n 是槽中的元素数量。


lib.rs:

分层定时器轮

层次结构中的轮数由传递给具体构造函数 AllocWheel::new()CopyWheel::new() 的 Resolutions 数量确定。每个轮的大小会根据是否可用某些其他分辨率自动确定。例如,如果一个轮由 Resolution::TenMsResolution::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资源,并且可能避免了额外的分配。

没有运行时依赖