高效的定时器算法

9
什么是实现简单定时器库的最佳算法?该库应允许以下操作:
  1. 启动计时器
  2. 停止计时器
  3. 检查计时器是否仍在运行
在计时器到期时,将调用回调函数。
计时器模块将允许计时器具有N秒的时间分辨率,并且每隔N秒给该模块一个提示以检查已过期的计时器。
许多计时器可以同时处于活动状态。
最佳算法需要满足以下目标:
  1. 对正在处理计时器到期回调时启动/停止计时器具有强大的鲁棒性
  2. 允许快速启动、停止和检查计时器
  3. 具有小的内存占用
谢谢。

解决方案应该使用哪种编程语言? - Liran Orevi
1
我对算法比实现更感兴趣。如果有所帮助的话,我很可能会用C语言来实现它。 致敬 - Howard May
3个回答

14

2
所引用的论文讨论了不同的计时器算法以及它们适当使用的场景。如果链接在未来失效,知道标题为“哈希和分层时间轮:用于高效实现计时器设施的数据结构”可能会有所帮助。 - Howard May
1
在阅读您的答案之前,我不知道NettyIO类HashedWheelTimer,但实现似乎非常出色。毫不含糊地说:不要重复造轮子! - kevinarpe
1
这里还有一个C语言实现版本:http://www.25thandclement.com/~william/projects/timeout.c.html - starseeker

3
计时器通常最好在操作系统内核中以汇编/C级别实现,尽可能利用平台特定功能,如APIC计时器。
您可能想查看http://lwn.net/Articles/167897/以获取有关Linux实现的详细信息,并浏览Linux源代码以查看工作实现。

1

1
嗨,克里斯托弗, 我会看一下这些,但我更感兴趣的是算法,而不是采用现成的库。问候 - Howard May

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接