文档章节

基于时间轮的任务超时控制

zhangwei_2943
 zhangwei_2943
发布于 2015/01/20 17:46
字数 509
阅读 153
收藏 1

    平时我们在写程序的时候很多情况下都会遇到任务超时处理的业务情况(比如说调用一个后台的api接口如果超过5秒没有返回数据就出发超时的业务逻辑),针对这种业务平时我们都是使用一个线程+timer来实现。

这个实现方式本身是没有问题的,但是如果遇到同时又N多个需要处理超时的业务函数,这种情况下如果还给每个超时都用一个线程来控制势必会降低很多性能

    这里提出了一个新的概念《基于时间轮算法》来控制任务超时,可以将这个算法简单的理解为时钟,在时钟的每一个格子里面添加一个任务队列,任务队列里面是相应的超时任务.秒表会每隔固定的时间转动一次时间轮,

当秒表执行的格子里面有超时任务存在时就执行这个超时任务(通过这种方式就可以实现 一个线程控制多个超时任务)极大的提升了系统效率。

    时间轮算法可以通过下面这张图来分析具体逻辑

   

时钟可以分为 秒针/分针/时针,以最小单位作为时间轮的运行轨迹,在添加任务的时候根据最小单位和超时时间计算出 时间轮的 周期+卡槽位置,时间轮在跳转的时候每次都会检查卡槽是否有超时任务队列存在,如果有在判断 周期是否满足,如果都满足条件则出发 超时执行。

下面这个代码库 就是用go写的一个具体实现,已经在生产环境稳定运行,有需要的朋友可以直接使用

https://github.com/zhangwei1234/go-timer-wheel.git


© 著作权归作者所有

共有 人打赏支持
zhangwei_2943
粉丝 0
博文 3
码字总数 1832
作品 0
成都
架构师
私信 提问
Timer 源码解读[连载2]

转自: https://github.com/yjhjstz/deep-into-node Timer源码解读 涉及源码 lib/timers.js src/timerwrap.cc deps/uv/src/unix/timer.c deps/uv/src/heap-inl.h 主要分为 javascript 层面的......

_朴灵_
2018/05/14
0
0
C基础库--libfastcommon

libfastcommon是一款开源的C基础库,她是从FastDFS项目中剥离出来的C基础库。这个库非常简单、高效和稳定,提供的函数主要包括如下几类: string:字符串处理; logger:日志记录,支持日志轮...

fastdfs
2017/03/08
412
0
分布式计划任务设计与实现

分布式计划任务设计与实现 http://netkiller.github.io/journal/scheduler.html Mr. Neo Chen (netkiller), 陈景峰(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 131136688...

netkiller-
2014/09/30
2.6K
3
Eureka的TimedSupervisorTask类(自动调节间隔的周期性任务)

版权声明:欢迎转载,请注明出处,谢谢。 https://blog.csdn.net/boling_cavalry/article/details/82795825 起因 一个基于Spring Cloud框架的应用,如果注册到了Eureka server,那么它就会定...

博陵精骑
2018/09/22
0
0
用Erlang实现Time Wheel

游戏开发总会要用到timer,离不开定时器的使用。像界面需要定时去绘制更新界面,后端也需要来定时执行逻辑,驱动事件。条条道路通罗马,就看你使用技巧好不好了。 一般服务器都是10ms一个tic...

rongtou
2016/12/27
41
0

没有更多内容

加载失败,请刷新页面

加载更多

开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
11
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
7
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
4
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0
RabbitMQ学习(2)

1. 生产者客户端 void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body) 1. 在生产者客户端发送消息时,首先......

江左煤郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部