高性能的定时器设计---时间轮

本文介绍了使用时间轮实现高性能定时器的概念,通过不同粒度的轮子提高定时任务管理的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高性能定时器

时间轮




    一个滴答的时间称为时间轮的槽间隔si(心搏时间)
    时间轮共N个槽,因此运转一周时间为`N*si`
    每个槽指向一条定时器链表(每条链表上的定时器具有相同特征,即他们的定时时间相差几个(0,1,2...)N*si)

假如现在指针指向槽cs,我们要添加一个定时时间为ti的定时器,则该定时器会被插入槽ts对应的链表中去:
    ts = (cs+(ti/si))%N
可以看出,时间轮使用哈希表的思想将定时器散列到不同的链表上。之前讨论的链式定时器插入操作复杂度受定时器个数影响,但这里基本不受此影响了。

对于时间轮要提出的问题是:
    要提高定时精度,就要使si值足够小(毕竟不能精确按照每个定时器来定时);要提高执行效率,要求N值足够大(N值大了,每个链表上数量就少了,每次要处理的就不多)

这里只是简单的时间轮,复杂的时间轮可能不止一个,不同的轮子拥有不同的粒度,比如精度高的转一圈,精度低的仅往前移动一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值