码迷,mamicode.com
首页 > 其他好文 > 详细

ticker定时器:

时间:2020-03-12 20:25:27      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:rtu   content   dql   cnmp   sele   string   创建   停止   otc   

Ticker是周期性定时器,即周期性的触发一个事件,通过Ticker本身提供的管道将事件传递出去。

定时聚合任务

有时,我们希望把一些任务打包进行批量处理。比如,公交车发车场景:

  • 公交车每隔5分钟发一班,不管是否已坐满乘客;

  • 已坐满乘客情况下,不足5分钟也发车;

下面代码演示公交车发车场景:

// TickerLaunch用于演示ticker聚合任务用法
func TickerLaunch() {
  ticker := time.NewTicker(5 * time.Minute)
  maxPassenger := 30 // 每车最大装载人数
  passengers := make([]string, 0, maxPassenger)
 
  for {
    passenger := GetNewPassenger() // 获取一个新乘客
    if passenger != "" {
      passengers = append(passengers, passenger)
    } else {
    time.Sleep(1 * time.Second)
  }
 
  select {
  case <- ticker.C: // 时间到,发车
    Launch(passengers)
    passengers = []string{}
  default:
    if len(passengers) >= maxPassenger { // 时间没到,车已座满,发车
      Launch(passengers)
      passengers = []string{}
    }
  }
  }
}
上面代码中for循环负责接待乘客上车,并决定是否要发车。每当乘客上车,select语句会先判断ticker.C中是否有数据,有数据则代表发车时间已到,如果没有数据,则判断车是否已坐满,坐满后仍然发车。
总结

Ticker相关内容总结如下:

  • 使用time.NewTicker()来创建一个定时器;

  • 使用Stop()来停止一个定时器;

  • 定时器使用完毕要释放,否则会产生资源泄露;

ticker定时器:

标签:rtu   content   dql   cnmp   sele   string   创建   停止   otc   

原文地址:https://www.cnblogs.com/smallleiit/p/12482416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!