go 經過 channel 控制併發任務

package main

import "fmt"

func main() {

    workChan := make(chan int, 10000) //存儲chan
    controlChan := make(chan int, 100) //控制chan
    var work int
    var mange int
  
    for i := 0; i < 100; i++ {
        go func() {
            defer func() {controlChan <- 1}()
            for j := 0; j < 100; j++ {
                workChan <- i
            }
        }()
    }


    for range controlChan {
        mange++ //當控制chal 滿 則關閉控制與工做channel
        if mange == 100 {
            close(workChan)
            close(controlChan)

        }
    }

    for range workChan {
        work++
    }

    fmt.Println("channel長度", work)
}
相關文章
相關標籤/搜索