Netty HashedWheelTimer可以处理多少超时?

Netty HashedWheelTimer可以处理多少超时?,netty,Netty,“每个控制盘的默认刻度数(即控制盘的大小)为512。如果要安排大量超时,可以指定更大的值。” 这是否意味着默认情况下它只能处理512个超时?如果我想要10万次25秒的超时(for),我应该将什么值设置为每个轮子的刻度数?轮子基本上是一个具有单独链接的哈希表,其哈希函数是“通知时间”。单独的链接被实现为一个无界的有序集,因此一个轮子实际上可以容纳无限数量的超时 如果您计划在遥远的将来超时(即大延迟),则大延迟将除以wheelSize*tickDuration,并将其余数用作超时的哈希。因此,控制盘

“每个控制盘的默认刻度数(即控制盘的大小)为512。如果要安排大量超时,可以指定更大的值。”


这是否意味着默认情况下它只能处理512个超时?如果我想要10万次25秒的超时(for),我应该将什么值设置为每个轮子的刻度数?

轮子基本上是一个具有单独链接的哈希表,其哈希函数是“通知时间”。单独的链接被实现为一个无界的有序集,因此一个轮子实际上可以容纳无限数量的超时

如果您计划在遥远的将来超时(即大延迟),则大延迟将除以
wheelSize*tickDuration
,并将其余数用作超时的哈希。因此,控制盘中的当前插槽可以同时容纳将在下一个
tickDuration
内过期的超时和将在
(tickDuration*wheelSize*n)
ms内过期的超时,其中变量
n
将随着计时器线程在控制盘上的迭代而减少。当计时器线程访问插槽时,后者将花费一些CPU时间,因为实际上轮到它们过期。(这类似于传统哈希表中的冲突)。为了减少碰撞的机会,您可以增加轮子的大小

例如,如果您确定大多数计划的超时将在一分钟内过期,则可以将
wheelSize*tickDuration
设置为一分钟(例如600个插槽*100毫秒)

有关哈希控制盘的详细信息,请阅读