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写入值,阻塞解除,调用函数

  • 相关阅读:
    uva 11488
    探测器-旅行者1号:百科
    理论-生命起源理论:百科
    定律:目录
    定律:百科
    理论:目录
    理论(哲学):百科
    理论:百科
    汉语-词语:潮汐
    物理-电磁-电磁相互作用:百科
  • 原文地址:https://www.cnblogs.com/unqiang/p/6775617.html
Copyright © 2011-2022 走看看