Closed winyMu closed 4 years ago
虽然 DelayQueue 中 offer(添加)和 poll(获取并删除)操作的时间复杂度为 O(log n),但是相比定时任务的个数而言,bucket 的个数其实是非常小的(也就是 O(log n) 中的 n 很小),因此性能也是没有问题的。
看到作者博客中提到delayQueue中的元素个数应该只是跟bucket个数n有关,但是看到如下代码,在添加一个timer时,只要expiration不同,就会被添加到delayQueue中,所以这里会比较疑惑,这个时间复杂度是与“不同expiration的timer个数”有关?
if b.SetExpiration(virtualID * tw.tick) { tw.queue.Offer(b, b.Expiration()) }
在添加一个timer时,只要expiration不同,就会被添加到delayQueue中
一个时间轮中的一个 bucket,同一时刻只会对应一个 expiration:
b.SetExpiration()
get, 感谢指点!
看到作者博客中提到delayQueue中的元素个数应该只是跟bucket个数n有关,但是看到如下代码,在添加一个timer时,只要expiration不同,就会被添加到delayQueue中,所以这里会比较疑惑,这个时间复杂度是与“不同expiration的timer个数”有关?
if b.SetExpiration(virtualID * tw.tick) { tw.queue.Offer(b, b.Expiration()) }