TimeWheel时间轮算法原理及实现(附源码)
时间轮算法原理及实现
- 前言
- 1.时间轮核心
- 2.简单定时器
- 3.任务队列
- 4.优化任务队列
- 5.简单时间轮
- 6.多层时间轮
前言
在各种业务场景中,我们总是会需要一些定时进行一些操作,这些操作可能是需要在指定的某个时间点操作,也可能是每过一个固定的时间间隔后进行操作,这就要求我们需要有一个定时调度的逻辑,同时,这种定时操作,既有可能在某一刻数量比较密集,也有可能时间间隔比较密集,这就要考虑定时调度器对性能的影响.
如果在业务逻辑中,存在数量较大的定时任务,且每个定时任务都创建一个只属于自己的的调度管理器负责自身的生命周期及周期任务执行, 这就极大的浪费cpu的资源,降低自身性能.时间轮算法是一种调度模型,可以有效地利线程资源来处理批量周期任务,时间轮调度模型将数量巨大的定时任务绑定在单个调度器上,并统一使用这个调度器来管理,触发以及执行任务.这种模型使得大量延时任务,周期任务以及通知任务的管理变得高效.
1.时间轮核心
时间轮算法的核心是,轮询线程不再是负责遍历所有任务,而只在负责处于其当前时间上的任务
.就像钟表一样,时间轮有一个指针会一直旋转,每转到一个新的时间,就去执行挂在这一时刻下的所有任务,当然,这些任务通常是交给其他线程去做,指针要做的只是继续往下转,不会关心任务的执行进度.
下面,我们就从一个最简单的定时任务来一步步优化,看看时间轮到底是怎么设计出来的
2.简单定时器
这种方式最简单,如果想定期执行一个操作,只需要起一个定时器,设置时间间隔,设置回调函数,让它跑就完了.在定时任务非常少的情况下,这种方式没什么问题.如果定时任务的数目很大,并且都有不同的周期,那就产生了非常多的定时器, 这对系统的内存
和cpu
都产生了很大的压力,程序还没开始跑呢,定时器已经满天飞了…
3.任务队列
为了不产生过多的定时器,我们只使用一个定时器,将所有的定时任务放到一个队列
中,每个定时任务都保存一份自己的定时信息,定时器每隔一个周期轮询一遍队列中的所有任务,如果任务的超时时间已到,则执行该任务,如果超时时间还没到,则将该任务的定时信息减掉一个定时器的时间间隔,等到完全减为0时,该任务就可以被执行了, 这个定时器一直这么执行并轮询下去.假设当前定时任务总数有100个,那定时器每个周期会遍历
一个100个元素的队列,听上去还可以,那要有1000个的时候,10000个时候,这定时器就太可怜了,像一头老牛
TimeWheel时间轮算法原理及实现(附源码)相关推荐
- SHA3系列(KECCAK)哈希算法原理及实现(附源码)
相关文章: (本文持续更新中) SHA3系列(KECCAK)哈希算法原理及实现(附源码) SHA512系列哈希算法原理及实现(附源码) SHA224和SHA256哈希算法原理及实现(附源码) 国密SM ...
- SHA224和SHA256哈希算法原理及实现(附源码)
相关文章: SHA224和SHA256哈希算法原理及实现(附源码) 国密SM3哈希算法原理及实现(附源码) SHA1哈希算法原理及实现(附源码) MD5哈希算法原理及实现(附源码) MD4哈希算法原理 ...
- 国密SM3密码杂凑算法原理及实现(附源码)
相关文章: 国密SM3哈希算法原理及实现(附源码) SHA1哈希算法原理及实现(附源码) MD5哈希算法原理及实现(附源码) MD4哈希算法原理及实现(附源码) MD2哈希算法原理及实现(附源码) M ...
- SHA512系列哈希算法原理及实现(附源码)
相关文章: SHA512系列哈希算法原理及实现(附源码) SHA224和SHA256哈希算法原理及实现(附源码) 国密SM3哈希算法原理及实现(附源码) SHA1哈希算法原理及实现(附源码) MD5哈 ...
- 时间轮算法解析(Netty HashedWheelTimer源码解读)
1.背景 时间轮算法可以用于高效的执行大量的定时任务. 在Netty中的一个典型应用场景是判断某个连接是否idle,如果idle(如客户端由于网络原因导致到服务器的心跳无法送达),则服务器会主动断开连 ...
- java 时间轮算法_时间轮算法解析(Netty HashedWheelTimer源码解读)
1.背景 时间轮算法可以用于高效的执行大量的定时任务. 在Netty中的一个典型应用场景是判断某个连接是否idle,如果idle(如客户端由于网络原因导致到服务器的心跳无法送达),则服务器会主动断开连 ...
- 孙玄辜教授:基于Linux内核的时间轮算法设计实现【附代码】
文章目录 1.时间轮算法基本思想 2.定时器的添加 3.定时器到期处理 孙玄:毕业于浙江大学,现任转转公司首席架构师,技术委员会主席,大中后台技术负责人(交易平台.基础服务.智能客服.基础架构.智能运 ...
- linux直流电机测试,带霍尔传感器编码器的直流减速电机测速原理讲解(附源码)...
查看: 14294|回复: 83 带霍尔传感器编码器的直流减速电机测速原理讲解(附源码) 高级会员, 积分 891, 距离下一级还需 109 积分 积分金钱891 注册时间2019-4-22 在线时间 ...
- 超详讲解图像拼接/全景图原理和应用 | 附源码
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 概述 图像拼接是计算机视觉中最成功的应用之一.如今,很难找到不包含 ...
最新文章
- 【数字信号处理】傅里叶变换性质 ( 序列傅里叶变换共轭对称性质 | 推论 )
- ×××安全协议之IPsec
- proto 指定字段json名_比json快5倍的protobuf了解一下
- redis 备份导出rdb_Redis数据迁移利器之redisshake
- linux的shell脚本if语句,Shell脚本编程之判断语句
- Python 3.10 明年发布,看看都有哪些 PEP ?
- ACM 学习笔记(二) 位运算、并查集、模拟、枚举、递推、递归
- 信息安全系统设计基础第一次实验报告
- 韩顺平--Java坦克大战
- Windows 下载安装 Seata
- The following paths are ignored by one of your .gitignore
- 最简单的深拷贝_飘云羽逸_新浪博客
- appcan外部网页css,Appcan开发之页面布局与CSS排版
- 常州大学 计算机与人工智能学院,常熟理工学院新闻网
- MTD/QTD/YTD 去年同期 同比增长——Power BI
- ESXI6.7升级至ESXI7及各问题的解决
- 数据分析——问卷调查从模型到算法
- 不在同一局域网的两台电脑如何通过ssh连接
- liferay portal 中文安装指南
- SWUST OJ 616: 排序查找