zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Golang使用有缓冲channel实现协程池限制最大协程数量

Golang 实现 最大 限制 数量 协程 channel 缓冲
2023-09-27 14:25:41 时间

码字不易,转载请附原链,搬砖繁忙回复不及时见谅,技术交流请加QQ群:909211071

package main

import (
    "fmt"
    "strconv"
    "time"
    "sync"
)

var (
    maxRoutineNum = 3
)
type Duration int64
const (
    Nanosecond           = 1
    Microsecond          = 1000 * Nanosecond
    Millisecond          = 1000 * Microsecond
    Second               = 1000 * Millisecond
    Minute               = 60 * Second
    Hour                 = 60 * Minute
)

var wg sync.WaitGroup

func action(data string, ch chan int) {
    defer wg.Done()
    fmt.Println(data)
    time.Sleep(Second)
    <-ch
}

func main() {
    ch := make(chan int, maxRoutineNum)

    datas := [10]string{}
    for i := 0; i < 10; i++ {
        datas[i] = strconv.Itoa(i)
    }
    for i := 0; i < len(datas); i++ {
        ch <- 1
        wg.Add(1)
        go action(datas[i], ch)
    }

    wg.Wait()
}