Netty的HashedWheelTimer可以处理多少个超时?

5
文档指出:“默认轮数(即轮的大小)为512。如果您要安排大量超时,可以指定较大的值。”这是否意味着默认情况下它只能处理512个超时?如果我想要100,000个25秒的超时(用于SockJS),那么应该将刻度数设置为多少?
1个回答

9
这个“轮”基本上是一个带有分离链接的哈希表,其哈希函数是“通知时间”。分离链接是作为一个无界有序集合实现的,因此一个“轮”可以实际上容纳无限数量的超时。
如果您安排一个在遥远未来(即延迟较大)超时的超时,则将大延迟除以wheelSize * tickDuration,并使用其余数作为超时的哈希值。 因此,轮中的当前插槽可以容纳在下一个tickDuration内到期的超时和将在(tickDuration * wheelSize * n)毫秒内到期的超时,其中变量n会随着计时器线程迭代轮而减少。当计时器线程访问插槽时,后者会消耗一些CPU时间,因为它们实际上还没有到期。(这类似于传统哈希表中的碰撞)。为了减少碰撞的机会,可以增加轮的大小。
例如,如果您确定大多数安排的超时将在一分钟内到期,则可以使wheelSize * tickDuration为一分钟(例如600个插槽* 100毫秒)。
有关散列轮的详细信息,请阅读此文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接