netty时间轮HashedWheelTimer文档翻译及简单说明

Netty版本4.1.6。

Netty的时间轮HashedWheelTimer给出了一个粗略的定时器实现,之所以称之为粗略的实现是因为该时间轮并没有严格的准时执行定时任务,而是在每隔一个时间间隔之后的时间节点执行,并执行当前时间节点之前到期的定时任务。
当然具体的定时任务的时间执行精度可以通过调节HashedWheelTimer构造方法的时间间隔的大小来进行调节,在大多数网络应用的情况下,由于IO延迟的存在,并不会严格要求具体的时间执行精度,所以默认的100ms时间间隔可以满足大多数的情况,不需要再花精力去调节该时间精度。
HashedWheelTimer(hash时间轮)的主要数据结构被称作轮,简单来说,一个轮就是一张hash表,而对应的hash函数则代表得到在当前时间节点下已经到达触发时间的定时任务。默认情况下该hash表的大小是512,为了得到更大的时间跨度,可以通过调节该参数的大小实现。
只要一个HashedWheelTimer被初始化,都会有一个新的worker线程被创建,因此,一个时间轮实例在一个应用中被共享即可。如果在每一个连接中创建一个时间轮实例,将会导致影响到具体的应用性能。

以上是HashedWheelTimer中,作者给出的文档的翻译。

【netty时间轮HashedWheelTimer文档翻译及简单说明】在HashedWheelTimer中,都只会有一个worker线程,该线程会不断sleep相应的的时间间隔来触发下一个hash表中槽位的任务执行,在HashedWheelTimer中的hash表中,每一个槽位都是一个双向链表,每个节点都是一个等待执行的任务,但是并不是每一个双向链表中的任务都会执行,当其中一个任务下次执行时间间隔超过时间轮一个轮次的时候,将会将剩下的轮次字段减一,只有当剩下的轮次为1的时候才会执行。

    推荐阅读