文档章节

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

zhangwei_2943
 zhangwei_2943
发布于 2015/01/20 17:46
字数 509
阅读 113
收藏 1
点赞 0
评论 0

    平时我们在写程序的时候很多情况下都会遇到任务超时处理的业务情况(比如说调用一个后台的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 层面的......

_朴灵_
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 版权 © 2014 http://netkiller.github.io 2014-09-30 目录 1. 什么是分布式计划任务 2. 为什么采用分布式计划...

neo-chen
2014/09/30
2.6K
3
用Erlang实现Time Wheel

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

rongtou
2016/12/27
41
0
并发流程控制--cocoflow

Concurrency Control Flow 并发流程控制 一个基于协程和libuv的C++框架,仅通过 start、 await、 allof、 any_of 控制流程。 基于 协程(Coroutine) & libuv 的C++开发框架 使用 start | awai...

chishaxie
2013/10/21
1K
0
Netty工具类HashedWheelTimer源码走读(一)

简单介绍. A Timer optimized for approximated I/O timeout scheduling. 关于Timer的介绍可以看看这篇文章, 写得不错 : http://novoland.github.io/%E5%B9%B6%E5%8F%91/2014/07/26/%E5%AE%9......

德胜
2015/08/07
0
0
JPPF 3.1 发布,Java 并行处理框架

JPPF 3.1 发布,该版本新增一个基于 SSL/TLS 的安全通讯层,在管理控制台上增加表格拓扑逻辑的图形视图,可在客户端配置负载均衡的本地和远程执行,节点支持本地的 fork/join 执行模型,Exe...

oschina
2012/06/26
384
1
netty以及在RPC中的使用

本文主要讨论netty的实现以及其在rpc(hsf)的使用,同时探讨下多线程下下文切换对系统的影响。 本文主要内容: netty的结构和线程模型 线程切换、context switch、mode switch对系统的影响 ne...

zqrferrari
01/08
0
0
【网络编程】处理定时事件(三)---看看Libco的时间轮

前言 你以为我鸽了其实我没有鸽,这也算是一种鸽。 继续来填坑啦。 在上两篇中,我们都是使用的链表进行保存定时事件,当我们需要增加一个或者删除一个事件时都需要O(n)的时间复杂度,本篇我...

XiyouLinux_Kangyijie
2017/11/09
0
0
Redis的内存回收机制

Redis的内存回收机制主要体现在一下两个方面: 删除过期时间的键对象 删除过期键对象 :多行删除用于当客户端读取带有超市属性的键时,如果已经超过键设置的过期时间,会执行删除操作并返回空...

JackY-Ji
01/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周六乱弹 —— 妹子和游戏哪个更好玩

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @andonny :分享唐朝乐队的单曲《国际歌》 《国际歌》- 唐朝乐队 手机党少年们想听歌,请使劲儿戳(这里) @举个栗子- :日常祈雨 邪恶的大祭...

小小编辑
26分钟前
61
4
流利阅读笔记32-20180721待学习

“人工智能”造假:只有人工,没有智能 Lala 2018-07-21 1.今日导读 当今社会,擅长单个方面的人工智能已经盛行,手机借助 AI 智慧防抖技术帮助大家拍出清晰照片,谷歌研发的 AI 助手将可以帮...

aibinxiao
今天
2
0
我的成长记录(一)

今天突然精神抖擞,在我的博客下新开一项分类>成长记录,专门记录每隔一段时间我的一点感悟吧。因为今天才专门花时间新开这样一个分类,所以以前有过的一些感悟没有记录下来,现在已经想不起...

dtqq
今天
0
0
机器学习管理平台 MLFlow

最近工作很忙,博客一直都没有更新。抽时间给大家介绍一下Databrick开源的机器学习管理平台-MLFlow。 谈起Databrick,相信即使是不熟悉机器学习和大数据的工程湿们也都有所了解,它由Spark的...

naughty
今天
0
0
idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
13
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部