常见的定时器实现方式有两种:git
- 最小堆
- 时间轮
最小堆插入操做的时间复杂度是O(logn),好比ScheduledThreadPoolExecutor的DelayedWorkQueue,而时间轮的实现,插入只须要o(1),在到期删除时的时间复杂度也是o(1)github
时间轮又分为单层和多层,多层主要解决时间溢出问题,也能够用单轮多圈的实现,这里用golang写了一个单轮多圈的实现,测试代码...golang
这里生成了一个最小时间刻度为100ms、有1024个槽的时间轮, tw.AddScheduleTask 表示添加一个定时任务,测试结果为:测试
其它也没啥写的...具体看源码和测试代码吧...3d
源码地址:Githubcdn