go ticker源码分析

结构体定义

Timer是一次性定时器,Ticker是周期性定时器,实现相同,系统协程处理所有定时器。

Ticker结构体

C是容量1的channel,如果里面数据没被取走,那么丢失下一个周期事件。

runtimeTimer结构体

这里的回调函数是,向C中存入当前时间。

timersBuckets

数组固定长度64,每次创建定时器,协程所在进程id%64作为定时器存入的timersBuckets的下标。
定时器增加或者删除时加Mutex锁。

系统协程处理逻辑

timer根据定时时间保存在四叉小顶堆中,每次系统协程根据最短定时时间睡眠一段时间后处理定时任务。如果是周期性任务,处理完重新放回并调整堆;否则,处理完丢弃。

参考资料

《GO专家编程》

posted on 2024-02-05 17:07  王景迁  阅读(8)  评论(0编辑  收藏  举报

导航