文档章节

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

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

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

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

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

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

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

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

   

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

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

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


© 著作权归作者所有

zhangwei_2943
粉丝 0
博文 3
码字总数 1832
作品 0
成都
架构师
私信 提问
加载中

评论(0)

Kafka解惑之时间轮 (TimingWheel)

Kafka中存在大量的延迟操作,比如延迟生产、延迟拉取以及延迟删除等。Kafka并没有使用JDK自带的Timer或者DelayQueue来实现延迟的功能,而是基于时间轮自定义了一个用于实现延迟功能的定时器(...

osc_sq3qw4di
2018/06/06
8
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
XXL-JOB v2.1.0 发布,分布式任务调度平台

v2.1.0 Release Notes 1、自研调度组件,移除quartz依赖:一方面是为了精简系统降低冗余依赖,另一方面是为了提供系统的可控度与稳定性; 触发:单节点周期性触发,运行事件如delayqueue; ...

许雪里
2019/07/08
3.1K
22
《Linux高性能服务器编程》学习总结(十一)——定时器

第十一章 定时器   这里的定时器主要指的是定时器容器,TCP连接中有保活定时器,为了定期查看TCP连接是否断开,可以用socket选项实现,但是较为麻烦,所以一般都由应用层负责保活,这是定时...

osc_p8zyme9p
2018/02/13
3
0
Netty 工具类 —— HashedWheelTimer 讲解

一、前言 在网络通信中管理上万的连接,每个连接都有超时任务,如果为每个任务启动一个TImer超时器,那么会占用大量资源。为了解决这个问题,可用Netty工具类HashedWheelTimer。 二、HashedW...

osc_r74j15vd
2019/03/24
20
0

没有更多内容

加载失败,请刷新页面

加载更多

Windows 10 中安装 Anaconda 3

首先通过下面链接地址下载 Anaconda 的个人版本。 https://www.anaconda.com/products/individual 从上面下载的地址中,选择你需要的版本,目前 Windows 应该基本上都是 64 位的了。 在你下载...

honeymoose
35分钟前
19
0
如何禁用textarea的resizable属性? - How do I disable the resizable property of a textarea?

问题: I want to disable the resizable property of a textarea . 我想禁用textarea的resizable属性。 Currently, I can resize a textarea by clicking on the bottom right corner of t......

技术盛宴
35分钟前
25
0
即时通信E聊SDK简介(1)

2.简介: E聊SDK是一套适用于PC端, 移动端的即时通讯解决方案,源代码开放。E聊整合了即时通讯的基础能力,使用E聊,您可以让您的应用快速接入即时聊天的功能。E聊现已适配PC Web, 移动Web, ...

E聊
47分钟前
15
0
多个知乎账号一起登陆,同时管理运营的神器!

随着互联网生态的优化,从2016年开始,信息内容产业相当有关注度,其和粉丝互动起来很方便、流量大到惊人、可长远发展等等优势,迅速聚集了无数企业和个人,为了有非常全面的播放数据,大家通...

易媒助手
50分钟前
22
0
403禁止vs 401未经授权的HTTP响应 - 403 Forbidden vs 401 Unauthorized HTTP responses

问题: For a web page that exists, but for which a user does not have sufficient privileges (they are not logged in or do not belong to the proper user group), what is the prope......

fyin1314
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部