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

1、背景

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

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

2、算法简介

java 时间轮算法_时间轮算法解析(Netty HashedWheelTimer源码解读)_第1张图片

网上盗个图,时间轮算法可以通过上图来描述。假设时间轮大小为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,时间轮算法)