Always have x number of goroutines running at any time

前端 未结 7 1802
鱼传尺愫
鱼传尺愫 2020-12-13 00:10

I see lots of tutorials and examples on how to make Go wait for x number of goroutines to finish, but what I\'m trying to do is have ensure there are always x number running

7条回答
  •  悲&欢浪女
    2020-12-13 00:43

    Thanks to everyone for helping me out with this. However, I don't feel that anyone really provided something that both worked and was simple/understandable, although you did all help me understand the technique.

    What I have done in the end is I think much more understandable and practical as an answer to my specific question, so I will post it here in case anyone else has the same question.

    Somehow this ended up looking a lot like what OneOfOne posted, which is great because now I understand that. But OneOfOne's code I found very difficult to understand at first because of the passing functions to functions made it quite confusing to understand what bit was for what. I think this way makes a lot more sense:

    package main
    
    import (
    "fmt"
    "sync"
    )
    
    const xthreads = 5 // Total number of threads to use, excluding the main() thread
    
    func doSomething(a int) {
        fmt.Println("My job is",a)
        return
    }
    
    func main() {
        var ch = make(chan int, 50) // This number 50 can be anything as long as it's larger than xthreads
        var wg sync.WaitGroup
    
        // This starts xthreads number of goroutines that wait for something to do
        wg.Add(xthreads)
        for i:=0; i

提交回复
热议问题