小编cac*_*tus的帖子

如何设置完成工作的最大 goroutine 数量?

var wg sync.WaitGroup
wg.Add(len(work))

sem := make(chan struct{}, 10)

wgDone := make(chan bool)

for i < len(work)-1 {
    go func() {
        defer wg.Done()
        sem <- struct{}{}
        defer func() {
            <-sem
        }()
        worker(work[i])
    }()
    i = i + 1
}

go func() {     
    wg.Wait()
    close(wgDone)
}()
Run Code Online (Sandbox Code Playgroud)

我一次只需要10 个新的 goroutine来执行这项工作。这是我当前的解决方案,它阻止 goroutine 继续运行,因此一次只有 10 个。我怎样才能改变这个,这样它就不会创建大量被阻塞等待工作的 goroutine,而是只创建 10 个完成所有工作的 goroutine?

go goroutine

0
推荐指数
1
解决办法
4850
查看次数

标签 统计

go ×1

goroutine ×1