014_时间轮原理
2021-08-25 20:51:11 1 举报
kafka时间轮原理图解
作者其他创作
大纲/内容
84
10
延迟28ms的任务怎么办????
11
140
总结:1. 多级时间轮负责延迟任务的插入和删除,时间复杂度为O(1);2.DelayQueue负责表盘指针的推进,时间复杂度为O(1)
4
从队头poll
task:1ms
4ms
task: 4ms
70ms
TimerTaskList: 4ms
126
5
0
task:70ms
TimerTaskList: 5ms
98
112
14
DelayQueue
9
154
task: 5ms
假设此时currentTime指向1ms的时间格位置,71ms的任务再过1ms就可以执行,则放在2ms的时间格位置上
56
42
28ms??
1
TimerTaskList: 28ms
task:71ms
x
172
后台线程
底层数据结构:数组+双向链表
表盘指针currentTime如何推进呢???
2
5ms
3
28
多级时间轮机制:1.第一级是:14*1ms2.第二级是: 14*14ms3.第三级是:14* (14*14ms)每上升一级,时间格数相同,tickMs都是前一级的interval:原tickMs*wheelSize
12
task: 28ms
currentTime
注意这里,延迟71ms的任务被加入到了70ms延迟的时间格里,当currentTime转到70ms的时候,71ms的任务其实还没法执行,也就是说,再过1ms这个任务就可以执行,那么此时会将这个任务转移到上一个时间轮里的1ms的时间格里,并从70ms这个链表中移除
168
70
28ms
7
13
8
6
71ms
TimerTaskList: 70ms
0 条评论
下一页