chenyahui / chenyahui.github.io

My blog
http://www.cyhone.com
0 stars 2 forks source link

libco 的定时器实现——时间轮 | 编程沉思录 #29

Open chenyahui opened 4 years ago

chenyahui commented 4 years ago

https://www.cyhone.com/articles/time-wheel-in-libco/#more

定时器是网络框架中非常重要的组成部分,往往可以利用定时器做一些超时事件的判断或者定时清理任务等。 定时器有许多经典高效的实现。例如,libevent 采用了小根堆实现定时器,redis 则结合自己场景直接使用了简单粗暴的双向链表。 时间轮也是一个非常经典的定时器实现,Linux 2.6 内核之前就采用了多级时间轮作为其低精度定时器的实现。而在微信的协程库 libco 中,也用了单级时间轮来处理其内

wendajiang commented 3 years ago

这里有个疑问:单级时间轮插入,如果有60s的限制是不是就不需要取余,因为内存上已经60*1000,每个slot就是1ms,既然只支持60s内的时间插入,直接将diff作为index插入即可

chenyahui commented 3 years ago

@wendajiang 这里有个疑问:单级时间轮插入,如果有60s的限制是不是就不需要取余,因为内存上已经60*1000,每个slot就是1ms,既然只支持60s内的时间插入,直接将diff作为index插入即可

并不是,这里叫时间轮,自然是一个环形的数组结构,当前触发事件不一定在第0位,因此也需要取余才能算出对应的槽