2009-05-15 67 views
7

实现简单定时器库的最佳算法是什么?图书馆应允许:高效定时器算法

  1. 定时器启动
  2. 定时器被停止
  3. 定时器进行检查它们是否仍在运行

定时器到期的回调函数会调用。

定时器模块将允许定时器具有Ns的时间分辨率,并且应该给模块每N个踢一个脚,以提示模块检查过期的定时器。

许多定时器可能同时处于活动状态。

最好的算法需要实现以下目标

  1. 是稳健的,以正在启动定时器/停止,而处理计时器到期回调
  2. 允许定时器被启动,停止和快速检测
  3. 有小内存占用

问候

+0

解决方案应使用哪种语言? – 2009-05-15 08:53:44

+0

我对算法比实现更感兴趣。如果它可以帮助你知道我最有可能实现它在C. 关心 – 2009-05-15 09:16:05

回答

8
我已经看到了计时器

最好的算法是在研究论文Hashed and Hierarchical Timing Wheels: Data Structures for the Efficient Implementation of a Timer Facility

我知道在Java中发现了一个计时器轮没有与Netty的,JBoss的实现,我相信其他地方也可以使用,如果你正在用Java编写。

+1

引用的论文讨论了不同的计时器算法以及它们可以适当使用的地方。如果链接在将来失败,那么知道标题为“哈希和分层时序轮:有效实现定时器工具的数据结构”可能会有帮助 – 2014-10-15 09:49:12

+1

在阅读您的答案之前,我并不知道NettyIO类[ HashedWheelTimer](http://netty.io/4.0/api/io/netty/util/HashedWheelTimer.html),但实现看起来非常出色。没有双关语意:不要重新发明轮子! – kevinarpe 2016-03-12 10:09:41

+1

这里还有一个C实现:http://www.25thandclement.com/~william/projects/timeout.c.html – starseeker 2016-08-13 13:24:25

1

Ø在POSIX-ish系统中,您可以使用timer_create/timer_settime系列函数提供大量“免费”功能。

+1

嗨Kristopher, 我会看看这些,但我更感兴趣的算法比采取股票库。问候 – 2009-05-15 09:25:43

2

定时器通常最好在操作系统内核中,在汇编/ C级别实现,尽可能使用API​​C定时器等特定于平台的功能。

有关Linux实现的详细信息,请参阅http://lwn.net/Articles/167897/,并深入了解Linux源代码以查看工作实现。