目标
- 用go使用5级时间轮实现定时器
- 如有可能效率追求fast fast fast
参考资料
论文
http://www.cs.columbia.edu/~nahum/w6998/papers/ton97-timing-wheels.pdf
参考项目
参考书本
-
书名
深入linux内核架构(Professional Linux Kernel Architecture)(第15章时间管理)
tv1 0-255
-
范围
tv2 2的8次方-2的14次方-1
tv3 2的14次方-2的20次方-1
tv4 2的20次方-2的26次方-1
tv5 2的26次方-2的32次方-1
-
移动
第一组的内容在最多256个时间周期之后就会耗尽,必须将后续各组的定时器依次前推,重新补足第一组。在第一组的索引位置恢复到初始位置0之后,会将第二组中一个数组项的所有定时器补充到第一组。这种做做法,解释了为什么各组选择了不同的时间间隔。因为第一组的各数组项可能有256个不同的到期时间,而第二组中一个数组项的数据就足以填充整个第一组的整个数组。该道理同样适用于后续各组。第三组的一个数组项的数据同样足以填充整修第二个组,第四组的一个数组项也足以填充整修第三组,而第五组的一个数组项也足以填充整个第四组。
后续各组的数组位置并非随机选择的,其中的索引项仍然发挥了作用。但索引项的值不再是每个时钟周期加1,而是第256的i-1次方
- cascade函数用于从指定组取得定时器补充到前一组