Linux(服务器编程):30---高性能定时器之时间轮

一、时间轮概述

时间轮结构分析

  • 此处的时间轮属于简单的时间轮,复杂的时间轮可能有多个轮子,不同的轮子可能拥有不同的粒度。相邻的两个轮子,精度高的转一圈,精度低的仅往前移动一槽,就像水表一样

  • 实线的指针指向轮子上的一个槽(slot)
  • 实线的指针以恒定的速度顺时针转动,每转动一步就指向下一个槽(虚线的指针指向的槽),每次转动称为一个滴答(tick),一个滴答的时间称为时间轮的槽间隔si(slot interval),它实际上就是心搏时间
  • 每条链表上的定时器有相同的特征:它们的定时时间相差N*si的整数倍。时间轮正是利用这个关系将定时器散列到不同的链表中
  • 定时器的插入:假设现在的指针指向槽cs,我们要添加一个定时时间为ti的定时器,则该定时器将被插入槽ts(timer slot)对应的链表中:ts = ( cs + (ti/si) ) %N
  • 时间轮的特点:
    • 1.前面文章介绍的定时器链表使用一条唯一的链表来管理所有的定时器,插入操作的效率会随着定时器数目的增多而降低。而时间轮使用哈希表的思想,将定时器散列到不同的链表上。这样每条链表上的定时器数目都将明显少于原来的排序链表上的定时器数目,插入操作的效率基本不受定时器数目的影响
    • 2.对于时间轮而言,要提到定时精度,就要是si值足够小;要提到执行效率,则要求N值足够大

二、时间轮代码实现

待续

发布了1300 篇原创文章 · 获赞 827 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/103733141