我在阅读源码之后,确实发现函数中go出去了一个协程,处理定时任务。每当有新的timer定时器任务时,会将timer加入到timersBucket中的timer切片。timerBucket结构体如下:func timerproc 详细介绍可以称之为定时任务处理器,所有的定时任务都会加入timersBucket,然后在该函数中等待被处理。神奇之处就在于,实际上这两个函数产生的timer都放入了同一个timer堆,都在定时任务处理协程中等待被处理。实际上是有区别的,Sleep是使用睡眠完成定时任务,需要被调度唤醒。Tick函数是使用channel阻塞当前协程,完成定时任务的执行。当前并不清楚golang 阻塞和睡眠对资源的消耗会有什么区别,这方面不能给出建议。
暂无评论