3、缺陷 i)新建定时器的时间复杂度为O(n),删除定时器的时间复杂度也为O(n)(简单地将定时器结点改为双向结构,可将复杂度降为O(1)); ii)不能用于多线程环境 四 、多定时器的工业级实现 1、time wheelz算法 以前的BSD内核以及现在的linux内核的实现与三中所用算法相似(未实证,只是据说),据说现在的BSD内核已采用了较好的time wheelz算法。 time wheez算法的优点: i)将新建定时器的时间复杂度降近似为O(1)。它根据定时器的超时值,将新定时器散列到hash桶中; ii)遍历检查定时器的时间复杂度也近似为O(桶大小),如果散列均匀。 iii)删除定时器的时间复杂度近似为O(1),通过hash算法或临时存储(空间换时间的算法)。 2、time wheelz的实现 请参考文末给出的两个论文,惭愧得很,文章我也只是稍微瞄了下,以后有用得着的时候再深究吧。 五、参考文章 1、 Adam M. Costello and George Varghess, "Redesigning the BSD Callout and Timer Facilities". 1995.01,这篇文章实现了用time wheelz算法改善BSD内核的定时器算法,google一下,有免费下载;
2、George Varghess, Anthony Lauch, "Hashed and Hierarchical Timing Wheels: Efficient Data Structures for Implementing a Timer Facility". IEEE: 1997.12,这个看作者有没有提供免费下载了,否则是要从IEEE那里获取了~~