zoukankan      html  css  js  c++  java
  • golang 控制并发有两种经典方式:WaitGroup 和 Context

    Golang控制并发有两种经典的方式,一种是WaitGroup,另外一种就是Context。

    WaitGroup 方式:

    var wg sync.WaitGroup

    func fun1(i chan int) {
    time.Sleep(2 * time.Second)
    fmt.Println(<-i)
    wg.Done()
    }

    func main() {
    wg.Add(2)
    ch1 := make(chan int)
    ch2 := make(chan int)

    go fun1(ch1)
    go fun1(ch2)

    ch1 <- 1
          ch2 <- 2

          wg.Wait()
    fmt.Println("全部 goroutine 运行结束")
    }

    Context 方式:

    func main()  {
    ctx,cancel := context.WithCancel(context.Background())
    go watch(ctx,"监控一")
    go watch(ctx,"监控二")
    go watch(ctx,"监控三")

    time.Sleep(6 * time.Second)
    fmt.Println("结束监控")
    cancel()

    time.Sleep(2*time.Second)

    }

    func watch(ctx context.Context,name string) {
    for {
    select {
    case <- ctx.Done():
    fmt.Println(name+"监控结束,退出")
    return
                 default:
    fmt.Println(name+"监控中")
    time.Sleep(2*time.Second)
    }
    }
    }
     
  • 相关阅读:
    printf和sprintf
    操作数、运算符、表达式
    全自动加法机
    Ascll、GB2312、Ansi
    数组
    循环
    编程命名规范
    浮点数及缺陷
    Android编码规范
    RGB着色对照表
  • 原文地址:https://www.cnblogs.com/unqiang/p/13082845.html
Copyright © 2011-2022 走看看