时间轮算法

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

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

Java时间轮算法的实现

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

定时器的设计与时间轮算法

定时器是很多程序都需要使用到的功能。     现代操作系统有一个很重要的功能——进程切换,执行一个进程一半的时候跑去执行另一个进程。这是怎么做到的呢?     就是由可编程硬件定时器发出信号(操作系统...

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

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

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

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

Timing Wheel 时间轮算法 java实现

原文地址:http://blog.csdn.net/mindfloating/article/details/8033340 最近自己在写一个网络服务程序时需要管理大量客户端连接的,其中每个客户...

使用c++实现时间轮算法(Timing-Wh…

前段时间写了篇blog描述了时间轮算法(http://blog.sina.com.cn/s/blog_48d4cf2d0100pq9o.html),昨天终于动手用c++将其实现了,并通过了单元测试。我...

时间片轮转算法

  • 2014年11月24日 19:32
  • 3KB
  • 下载

FFT算法(严格控制计算时间)

  • 2015年04月30日 16:16
  • 6KB
  • 下载

算法的时间复杂度和空间复杂度-总结

算法的时间复杂度和空间复杂度-总结         通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学...

算法时间复杂度

  • 2017年11月02日 22:28
  • 125B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:时间轮算法
举报原因:
原因补充:

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