美文网首页
go定时器NewTicker&NewTimer

go定时器NewTicker&NewTimer

作者: 我帅的不忍直视 | 来源:发表于2020-02-16 15:38 被阅读0次

1.NewTimer:

func NewTimer(d Duration) *Timer {}

d时间段后触发

for {

select {

case <-t.C:

fmt.Println("timer触发")

if 循环 {

t.Reset(delat)

}

case <done:

return

}

}

NewTimer是延迟d时间后触发,如果需要循环则需要Reset。NewTimer的延迟时间并不是精确、稳定的,比如设置30ms,有可能会35、40ms后才触发,即使在系统资源充足的情况下,所以一个循环的timer在60ms内并不能保证会触发2两次,而ticker会。

2.NewTicker:

func NewTicker(d Duration) *Ticker {}

每隔时间段 d 就向该通道发送当时的时间;

go func(timer *Timer) {

defer timer.t.Stop()

for {

select {

case <-timer.t.C:

fmt.Println("ticker 触发")

case <-timer.done:

fmt.Println("ticker 关闭")

return

}

}

}(t)

它会调整时间间隔或者丢弃 tick 信息以适应反应慢的接者,所以回调触发不是稳定的,有可能在小于d的时间段触发,也有可能大于d的时间段触发,即使应用什么都不做。但在一段时间内,触发次数是保证的,比如在系统资源充足的情况下,设定触发间隔30ms,上一ticket触发间隔是44ms,下一触发间隔可能就是16ms,所以60ms内还是会触发两个ticket。

相似处:都可以实现一个定时器,timer需要每次reset时间。

区别:ticker的稳定性不如timer,一个空转的go程序,tickter也是不稳定的,触发间隔并不会稳定在d时间段,在ms级别上;而timer相对稳定,但也不是绝对的,timer也会在大于d的时间后触发。

综上所述,在ms级别定期刷新的定时器,ticket不够稳定但触发次数在一段时间内是固定的(也不是肯定固定,任务处理耗时非常大),timer相对稳定,但总有几个帧会在大于d的时间后触发,导致时间间隔累计值与实际时间戳差值误差越来越大。

所以如果想使用正确的刷新时间,建议使用NewTimer结合时间戳差值来保证程序刷新的正确性,不要利用d的累加或类减作为时间计算因子。

相关文章

  • go定时器NewTicker&NewTimer

    1.NewTimer: func NewTimer(d Duration) *Timer {} d时间段后触发 f...

  • 第06天(并发编程)_02

    15_Timer的使用.go 16_通过Timer实现延时功能.go 17_停止和重置定时器.go 18_Tick...

  • golang timer - note

    Go提供了两种定时器,此处分为一次性定时器、周期性定时器。 一次性定时器:定时器只计时一次,结束便停止; 周期性定...

  • dpvs学习笔记: 6 定时器实现及连接老化超时

    定时器实现方式很多种,定时器个数也不同。比如 go 老版本只有一个全局定时器,所以有些高性能项目抛弃了,自己实现用...

  • go 定时器

    timer 延时2秒 Ticker select

  • GO的定时器Timer 和定时任务cron

    GO的定时器Timer 和定时任务cron 上次我们说到了GO 中 swaggo 的应用,咱们来回顾一下 swag...

  • GO的日志怎么玩?

    GO的日志怎么玩 上次咱们分享了 GO的定时器timer和定时任务 cron,咱们来回顾一下: Timer 是什么...

  • Go语言中的定时器

    定时器 Go的定时器是在经过一段时间后做一些事情,位于标准库的time包。主要是time.Timer, time....

  • Go之定时器的几种玩法

    笔者最近在使用Go的定时器,发现Go提供的time包里面,按照下面几种场景做了区分,并分别提供一些API支持。主要...

  • Go 的定时器

    这个东西其实早就应该总结一下了,然而一直懒=_=,顺便事情很多,就一直没有总结。为什么需要做一个定时器呢,假设我们...

网友评论

      本文标题:go定时器NewTicker&NewTimer

      本文链接:https://www.haomeiwen.com/subject/jmvpfhtx.html