时间轮算法

原创 2016年06月02日 00:09:52

时间轮是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个不同时间的,则一个时间轮就效率堪忧

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

linux2.6定时器的时间轮算法分析

1.     Overview常用的定时器实现算法有两种:最小堆和时间轮(timing wheel)。在Linux2.6的代码中,kernel/timer.c文件实现了一个通用定时器机制,使用的是时间...

时间轮定时器 算法作用和升序定时器比较

l 时间轮的概念    关于定时器有很多种,有基于升序的定时器时间链表,但是这种链表存在效率的不足,就是当插入定时器的时候时间复杂度是O(n).今天,我们来认识一下高性能定时器时间轮。    如上图...

Timing Wheel 定时轮算法

最近自己在写一个网络服务程序时需要管理大量客户端连接的,其中每个客户端连接都需要管理它的 timeout 时间。 通常连接的超时管理一般设置为30~60秒不等,并不需要太精确的时间控制。 另外由于...

Java时间轮算法的实现

考虑这样一个场景,现在有5000个任务,要让这5000个任务每隔5分中触发某个操作,怎么去实现这个需求。大部分人首先想到的是使用定时器,但是5000个任务,你就要用5000个定时器,一个定时器就是一个...
  • cghver
  • cghver
  • 2016-11-17 23:44
  • 2655

linux2.6定时器的时间轮算法分析

1.     Overview 常用的定时器实现算法有两种:红黑树和时间轮(timing wheel)。 在Linux2.6的代码中,kernel/timer.c文件实现了一个通用定时器机制,使用...

时间片轮转算法

算法时间复杂度以及代码实现

附:选择排序:思想为从所有序列中找最小的放第一个位置,之后从剩余的元素中找最小的放第二个位置,直到所有的。时间复杂度为O(n*n)。 折半插入排序(二分插入排序):在直接插入排序的基础上,对插入A[i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)