zoukankan      html  css  js  c++  java
  • ticker定时器:

    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()来停止一个定时器;

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

  • 相关阅读:
    移动端web页面使用position:fixed问题
    登录的一些心得
    响应式网页设计
    xss(跨站脚本攻击),crsf(跨站请求伪造),xssf
    HTML5 离线功能介绍
    webapp开发经验和资料
    学习Java,值得你留意的问题(1)更名为《学习Java,容易被你忽略的小细节(1)》
    Python下搜索文件
    从百度地图API接口批量获取地点的经纬度
    获取代理IP地址(BeautifulSoup)
  • 原文地址:https://www.cnblogs.com/smallleiit/p/12482416.html
Copyright © 2011-2022 走看看