4 个版本 (2 个重大更新)

使用旧的 Rust 2015

0.3.0 2018年2月27日
0.2.0 2017年12月10日
0.1.1 2017年12月2日
0.1.0 2017年11月25日

#3#过期

Download history 100/week @ 2024-04-01 107/week @ 2024-04-08 48/week @ 2024-04-15 102/week @ 2024-04-22 65/week @ 2024-04-29 222/week @ 2024-05-06 109/week @ 2024-05-13 19/week @ 2024-05-20 100/week @ 2024-05-27 38/week @ 2024-06-03 10/week @ 2024-06-10 23/week @ 2024-06-17 21/week @ 2024-06-24 32/week @ 2024-07-01 93/week @ 2024-07-08 277/week @ 2024-07-15

每月425 次下载
tquic 中使用

Apache-2.0

16KB
301 代码行

Build Status

API 文档

使用二叉堆按过期时间对定时器进行排序的定时器系统。


lib.rs:

一个基于二叉堆的定时器系统,具有快速删除功能。

定时器按过期时间存储在二叉堆中。为了防止 O(n) 的删除操作,键也存储在一个 active 映射中。定时器只有在存在于活动映射中时才是活动的。当删除定时器时,它仅从活动映射中删除。当调用 expire 时,只有当定时器的键存在于活动映射中时,才返回定时器的键。

为了区分具有相同键的多个添加操作,以便当键被删除并重新添加时,所有之前未过期的键不会变为活动状态(因为它们仍然在堆中),每个堆条目和活动条目都附加到一个单调递增的计数器。这确保只有真正活动的相同键版本可以被过期。

为了提供这种快速删除功能,在过期和 time_remaining 功能期间会有额外的 CPU 开销,用于 hashmap 查找。对于每个堆条目和活动映射值中维护的重复键和单调计数器,还有额外的内存使用。请注意,当添加和删除大量键时,如果这些键位于堆的前端并且已经过期,则过期可能会变得很长,因为需要扫描以获取有效的过期值。但是,这取决于使用场景,因为可能被取消的键将均匀地分布在堆中,并且我们只扫描到非过期时间,无论键是否活动。为用户做出的权衡是,他们是否希望在删除期间执行任何扫描,以在过期和 time_remaining 功能期间节省内存和 CPU。

无运行时依赖