go ticker源码分析
结构体定义
Timer是一次性定时器,Ticker是周期性定时器,实现相同,系统协程处理所有定时器。
Ticker结构体
C是容量1的channel,如果里面数据没被取走,那么丢失下一个周期事件。
runtimeTimer结构体
这里的回调函数是,向C中存入当前时间。
timersBuckets
数组固定长度64,每次创建定时器,协程所在进程id%64作为定时器存入的timersBuckets的下标。
定时器增加或者删除时加Mutex锁。
系统协程处理逻辑
timer根据定时时间保存在四叉小顶堆中,每次系统协程根据最短定时时间睡眠一段时间后处理定时任务。如果是周期性任务,处理完重新放回并调整堆;否则,处理完丢弃。
参考资料
《GO专家编程》