美文网首页
golang 协程并发编程

golang 协程并发编程

作者: Ucan先生 | 来源:发表于2021-01-17 17:37 被阅读0次
    package main
    
    import (
        "fmt"
        "strconv"
        "time"
    )
    
    type Task struct {
        Name string
        Cnt int
    }
    
    var taskChan = make(chan Task,1000)
    var retChan = make(chan Task,1000)
    
    
    func main()  {
        go startRoutines(10000)
        go handlResult()
        go produce()
        time.Sleep(1*time.Minute)
    }
    
    
    func startRoutines(n int)  {
        for i:=0;i<n;i++{
            go doSomeThing()
        }
    }
    
    func handlResult()  {
        for {
            select {
                case  r := <- retChan:
                fmt.Println(r)
            }
        }
    }
    
    
    func doSomeThing()  {
        for {
            select{
                case t := <-taskChan:
                    for i:=0;i<1000000;i++{
                        t.Cnt++
                    }
                    retChan <- t
            }
    
        }
    }
    
    func produce()  {
        for i:=0;i<100000;i++{
            t := Task{
                Name: "task_"+strconv.Itoa(i),
                Cnt:  i,
            }
            taskChan <- t
        }
    }
    

    相关文章

      网友评论

          本文标题:golang 协程并发编程

          本文链接:https://www.haomeiwen.com/subject/znxzaktx.html