重用timer
重用的timer的目的在于减少减少创建timer实例
参考
重置条件
- 第一步是要确定timer是否已过期,用
timer.Stop
确定,true
表示timer未过期,false
表示timer已过期 - timer已过期,选择性抽干channel,然后调用
time.Reset
- timer未过期,
timer.Stop
返回true
,此时不必关系channel会被删除,可以直接调用time.Reset
代码
1 | go func() { |
说明:
timer
过期,之后从最小堆移除,此时调用timer.Stop
会失败,失败之后需要显示抽干channeltimer
未过期,调用timer.Stop
成功(此时channel抽干),可以直接调用timer.Reset
timer
未过期,若调用timer.Stop
失败,此时channel有可能之前被抽干,也有可能未被抽干,这个时候需要用select{}
选择性抽干
time.timer和time.ticker的区别
time.timer
一次性,到期后会从最小堆移除,可以用time.Reset
实现持续运行效果time.ticker
持续性,到期后执行下个周期