【发布时间】:2021-04-26 08:25:04
【问题描述】:
假设我有一个包含 10 个工作函数的列表,我希望 2 个(或更多)始终并行运行,当一个完成时在列表中前进,然后循环并永远继续。所以不要让服务器超载。
workers := make([]func(), 10)
for i := 0; i < 10; i++ {
workers[i] = createWorker()
}
func createWorker() func() {
return func() {
fmt.Println("I am working")
time.Sleep(time.Duration(rand.Intn(5)) * time.Second)
}
}
// My idea, keep sending workers to a buffered channel of size 2,
// so when one finishes it's no longer filled up and another worker is sent
workerChan := make(chan func(), 2)
go func() {
worker := <-workerChan
worker()
}()
for {
for _, worker := range workers {
workerChan <- worker
}
}
这将运行第一个工作函数,仅此而已。也许这个想法是正确的,我需要一些关于如何正确实施它的指导。
【问题讨论】:
-
我不确定您的代码在这里试图做什么。您是否正在寻找类似的示例:gobyexample.com/worker-pools?
标签: go