关闭

时间轮算法

标签: 时间轮
430人阅读 评论(0) 收藏 举报
分类:

时间轮是Linux中实现定时器的巧妙方式,也可以自己实现用于工程

可以参考http://www.ibm.com/developerworks/cn/linux/1308_liuming_linuxtime3/

和linux高性能服务器端编程的11.4.1


主要思想是构造一个轮->可以用循环列表实现,

插入:

新来一个定时事件,姑且视作包含定时时长和回调函数的类实例,算出还要转多少圈又多少step才转到,记录进实例

ticks = timeout / step
int pos = ( cur_slot + ( ticks % N ) ) % N
得到pos,即插入的位置(列表下标),ucr_slot为当前work的时间槽,step为时间轮的step,N为列表长度

把实例插入pos所在槽,每个槽对应一个链表

处理:

每次处理当前槽,遍历链表,检查时间是否超时,超时的则处理并删除,未超时的则圈数-1(圈数+step唯一确定一个定时事件)


只有一个时间轮则无法应付足够数量的定时事件,如有1~2^20个不同时间的,则一个时间轮就效率堪忧

这时可以考虑使用多个时间轮,模仿时钟进位的思想。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:734次
    • 积分:46
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档