高性能定时器
时间轮共N个槽,因此运转一周时间为`N*si`
每个槽指向一条定时器链表(每条链表上的定时器具有相同特征,即他们的定时时间相差几个(0,1,2...)N*si)
假如现在指针指向槽cs,我们要添加一个定时时间为ti的定时器,则该定时器会被插入槽ts对应的链表中去:
ts = (cs+(ti/si))%N
可以看出,时间轮使用哈希表的思想将定时器散列到不同的链表上。之前讨论的链式定时器插入操作复杂度受定时器个数影响,但这里基本不受此影响了。
对于时间轮要提出的问题是:
要提高定时精度,就要使si值足够小(毕竟不能精确按照每个定时器来定时);要提高执行效率,要求N值足够大(N值大了,每个链表上数量就少了,每次要处理的就不多)
时间轮
时间轮共N个槽,因此运转一周时间为`N*si`
每个槽指向一条定时器链表(每条链表上的定时器具有相同特征,即他们的定时时间相差几个(0,1,2...)N*si)
假如现在指针指向槽cs,我们要添加一个定时时间为ti的定时器,则该定时器会被插入槽ts对应的链表中去:
ts = (cs+(ti/si))%N
可以看出,时间轮使用哈希表的思想将定时器散列到不同的链表上。之前讨论的链式定时器插入操作复杂度受定时器个数影响,但这里基本不受此影响了。
对于时间轮要提出的问题是:
要提高定时精度,就要使si值足够小(毕竟不能精确按照每个定时器来定时);要提高执行效率,要求N值足够大(N值大了,每个链表上数量就少了,每次要处理的就不多)
这里只是简单的时间轮,复杂的时间轮可能不止一个,不同的轮子拥有不同的粒度,比如精度高的转一圈,精度低的仅往前移动一个