维护定时器.ppt

维护定时器.ppt

冲突链表的维护(2) 方法二: 在每个hash bucket中,新加入的定时器放在表头(无序链表) 每个时钟滴答,当前时间指针下移一个位置;如果元素所指链表非空,递减链表中每一个元素(高24位定时器值);若某个元素为0,调用相应的ExpiryProcessing 方法二的复杂度分析 StartTimer最坏及平均延迟均为O(1) 若定时器数量nTableSize,PerTickBookkeeping的平均延迟仍为O(1),这是因为: 每隔TableSize个时钟滴答,所有活跃定时器都做了一次减1,平均每个时钟滴答的运算次数是n/TableSize次。 如果所有定时器都哈希到一个hash bucket,那么,每隔TableSize个时钟滴答要做O(n)的工作,但在其余的每个时钟滴答内只做O(1)的工作,平均来说仍是O(1)。 若希望每个时钟滴答内所做的工作少且有界,只需令哈希表长度比需要支持的并发定时器数量大即可。 哈希函数的选择 以上复杂度分析结果对任何一种哈希函数均适用 哈希函数的选择并不重要: 哈希函数只影响PerTickBookkeeping延迟的突发性,并不影响它的平均延迟 不管采用什么哈希函数,PerTickBookkeeping的最坏情况延迟总是O(n) 因此,只需选择简单的哈希函数就可以了。 7.5 分层定时轮(Hierarchical Wheels) 为表示

文档评论(0)

1亿VIP精品文档

相关文档