该文档说,"每个车轮的蜱的默认数(即轮的大小)是512,您可以指定,如果你要安排大量超时的较大值."
这是否意味着默认它只能处理512次超时?如果我想要25秒的10万次超时(对于SockJS),我应该将每个车轮的刻度数设置为什么值?
轮子基本上是一个带有单独链接的哈希表,其哈希函数是"通知时间".单独的链接实现为无界有序集,因此轮子实际上可以保持无限次数的超时.
如果您计划在遥远的未来超时(即大延迟)的超时,则将大延迟除以wheelSize * tickDuration,并将其余数用作超时的哈希值.因此,轮中的当前插槽可以保持将在下一个tickDuration时间内到期的超时和将以(tickDuration * wheelSize * n)ms 为单位的超时,其中变量n将随着计时器线程在方向盘上迭代而减少.当定时器线程访问插槽时,后者将花费一些CPU时间,因为它实际上并不是他们过期的.(这类似于传统哈希表中的冲突).为了减少碰撞的机会,您可以增加轮子的尺寸.
例如,如果您确定预定的大多数超时将在一分钟内到期,您可以花wheelSize * tickDuration一分钟(例如600个插槽*100毫秒).
有关散列轮的详细信息,请阅读此内容.
| 归档时间: |
|
| 查看次数: |
2389 次 |
| 最近记录: |