常見的定時器實現方式有兩種:git
最小堆插入操做的時間複雜度是O(logn),好比ScheduledThreadPoolExecutor的DelayedWorkQueue,而時間輪的實現,插入只須要o(1),在到期刪除時的時間複雜度也是o(1)github
時間輪又分爲單層和多層,多層主要解決時間溢出問題,也能夠用單輪多圈的實現,這裏用golang寫了一個單輪多圈的實現,測試代碼...golang
這裏生成了一個最小時間刻度爲100ms、有1024個槽的時間輪, tw.AddScheduleTask 表示添加一個定時任務,測試結果爲:測試
其它也沒啥寫的...具體看源碼和測試代碼吧...3d
源碼地址:Githubcdn