1、背景

时间轮算法可以用于高效的执行大量的定时任务。

在Netty中的一个典型应用场景是判断某个连接是否idle,如果idle(如客户端由于网络原因导致到服务器的心跳无法送达),则服务器会主动断开连接,释放资源。得益于Netty NIO的优异性能,基于Netty开发的服务器可以维持大量的长连接,单台8核16G的云主机可以同时维持几十万长连接,及时掐掉不活跃的连接就显得尤其重要。

2、算法简介

网上盗个图,时间轮算法可以通过上图来描述。假设时间轮大小为8,1s转一格,每格指向一个链表,保存着待执行的任务。

假设,当前位于2,现在要添加一个3s后指向的任务,则2+3=5,在第5格的链表中添加一个节点指向任务即可,标识round=0。

假设,当前位于2,现在要添加一个10s后指向的任务,则(2+10)% 8 = 4,则在第4格添加一个节点指向任务,并标识round=1,则当时间轮第二次经过第4格时,即会执行任务。

时间轮只会执行round=0的任务,并会把该格子上的其他任务的round减1。

算法的原理非常浅显易懂,但是阅读源码实现还是有益的。

3、源码解析

1、构造方法

java 时间轮算法_时间轮算法解析(Netty HashedWheelTimer源码解读)相关推荐

  1. 时间轮算法解析(Netty HashedWheelTimer源码解读)

    1.背景 时间轮算法可以用于高效的执行大量的定时任务. 在Netty中的一个典型应用场景是判断某个连接是否idle,如果idle(如客户端由于网络原因导致到服务器的心跳无法送达),则服务器会主动断开连 ...

  2. matlab实战系列之人工鱼群算法求解TSP问题原理解析(下篇源码解析)

    从算法的名字中可以看出该算法是群体智能优化算法中的一种,人工鱼群算法通过模拟鱼群的觅食.聚群.追尾.随机等行为在搜索域中进行寻优. 人工鱼群算法有三个比较重要的概念:视野范围.k-距离邻域.多条鱼的中 ...

  3. java做用户画像_用户画像之标签查询(附源码)

    转自:https://blog.csdn.net/appearb... 目录 1.简介 2.架构图 3.表结构 4.标签筛选人群 1.请求格式 2.人群筛选 1.简介 通过处理数仓中的业务数据和埋点数 ...

  4. java 智能家居管理系统_智能家居系统手机客户端应用源码

    package com.friendlyarm.AndroidSDK; import android.util.Log; /** * 鎻忚堪锛氬嚱鏁板簱鎺ュ彛 * @author Administra ...

  5. 【Matlab】智能优化算法_蜻蜓优化算法DA

    [Matlab]智能优化算法_蜻蜓优化算法DA 1.背景介绍 2.灵感 3.公式推导 3.1 勘探和开发操作 4.算法流程图 5.文件结构 6.伪代码 7.详细代码及注释 7.1 DA.m 7.2 d ...

  6. 【Matlab】智能优化算法_蚁狮优化算法ALO

    [Matlab]智能优化算法_蚁狮优化算法ALO 1.背景介绍 2.基本思想 3.公式推导 3.1 ALO算法的运算符 3.2 蚂蚁的随机游动 3.3 困在蚂蚁坑里 3.4 修建陷阱 3.5 蚂蚁划向 ...

  7. 【Matlab】智能优化算法_灰狼优化算法GWO

    [Matlab]智能优化算法_灰狼优化算法GWO 1.背景介绍 2.基本思想 2.1 等级制度 2.2 狩猎方式 3.公式推导 3.1 社会等级制度 3.2 包围猎物 3.3 包围猎物 3.4 攻击猎 ...

  8. 点云配准2:icp算法在PCL1.10.0上的实现+源码解析

    目录 本文最后实现的配准实例 点云配准系列 准备 程序结构 主程序 1.为什么要降采样 2.体素降采样原理 3.点云更新 icp 配准前的参数设置 icp配准算法内部 对应点对确定(determine ...

  9. hystrix 源码 线程池隔离_“池”的思想:从java线程池到数据库连接池的源码解读(1)...

    一. java线程池 带着问题: 线程是什么时候被创建的? 线程会一直循环取任务任务吗?怎么做的? 线程取不到任务会怎么样? 线程会被Runnable和Callable的异常干掉吗? 线程怎么干掉自己 ...

最新文章

  1. Python 爬虫使用pyppeteer 网页进行向下翻页操作
  2. python文件读read()、readline()、readlines()对比
  3. ExpressQuantumGrid.Suite.v6.30 在Delphi 7中的安装 收藏
  4. nodejs服务端MVC架构介绍
  5. java. 端序_c代码测试本机处理器的端序
  6. mysql 删除过期日志_【转】对mysql日志进行操作的总结包括 启用,过期自动删除 等...
  7. 学生机房虚拟化(十)系统操作设计实现
  8. 【英语学习】【Level 07】U06 First Time L2 A good food experience
  9. python安装sklearn_让机器学习自动帮我们建模,这4个Python库能让你大开眼界!
  10. BZOJ4003 [JLOI2015]城池攻占 左偏树 可并堆
  11. ArcGIS学习总结(七)——河流制图综合
  12. 《AIX 5L 系统管理技术》学习笔记之第七章设备管理
  13. js图片上传(配合七牛云)
  14. android移动端设计规范,干货|超全面的移动端UI 设计规范整理汇总(下)
  15. 实验报告 三密码破解技术
  16. android 播放器封装,Android 播放器二次封装与实现
  17. java为什么打不开jar文件_win7系统双击打不开jar文件的解决方法
  18. “百度快照劫持”到底是什么意思?
  19. 【论文笔记】Deep Learning on Graphs: A Survey
  20. Ajax请求session超时解决办法

热门文章

  1. python职业发展规划-Python开发者的四大进阶攻略,菜鸟的成神之路
  2. 互联网其它岗位薪资排行榜
  3. 电脑安装双系统(win+Linux)的一些重要步骤总结
  4. 初识 Linux — 文本编辑器
  5. k3显示远程服务器未打开,k3客户端远程服务器链接
  6. 电脑很大,笔记本电脑响声很大怎么回事
  7. 【SPSS】因子分析详细操作教程(附案例实战)
  8. Java 面试题 —— 强类型语言和弱类型语言的区别
  9. 2020-319 几种分类器评估与调优方法手写整理 37互娱笔试题
  10. OSG三维渲染引擎编程学习之一:“第一章:OSG介绍” 之 “1.1 OSG简介”