zoukankan      html  css  js  c++  java
  • go的timer定时器实现

    示例如下:

    package main
     
    import (
        "fmt"
        "time"
    )
     
    func testTimer1() {
        go func() {
            fmt.Println("test timer1")
        }()
     
    }
     
    func testTimer2() {
        go func() {
            fmt.Println(time.Now().String())
        }()
    }
     
    func timer1() {
        timer1 := time.NewTicker(1 * time.Second)
        for {
            select {
            case <-timer1.C:
                testTimer1()
            }
        }
    }
     
    func timer2() {
        timer2 := time.NewTicker(5 * time.Second)
        for {
            select {
            case <-timer2.C:
                testTimer2()
            }
        }
    }
     
    func main() {
       go  timer1()
        	timer2()
    }
    

    运行结果截屏如下:

      

    看go的time部分源码 Ticker结构 

    type Ticker struct {
    
    C <-chan Time // The channel on which the ticks are delivered.
    
    r runtimeTimer
    
    }
    

      

    go的time和ticket的调用

    或者叫timmer internal和其他语言的开发思路不一样。

    其他语言,多是注册回调函数,定时,时间到了调用回调。

    go是 通过 chan

    的阻塞实现的。

    调用的地方,读取chan 

    定时,时间到,向chan写入值,阻塞解除,调用函数

  • 相关阅读:
    To be a master II.
    To be a master.
    快速排序
    选择排序
    冒泡排序
    Myeclipse 2013 Pro 激活工具
    Java多线程
    设计模式:动态代理
    面向对象
    新安装mysql修改密码,远程访问授权
  • 原文地址:https://www.cnblogs.com/unqiang/p/6775617.html
Copyright © 2011-2022 走看看