【发布时间】:2019-02-01 12:30:01
【问题描述】:
我正在 8 个不同的 goroutine 上运行一个 CPU 密集型脚本。这些 goroutine 中的每一个都至少需要几分钟才能完成,我想知道这样的事情是否可能:
for i := 0; i < len(input); i += 1 {
wait_for_number_of_processes_running_to_be_less_than_8
go calc_math_and_things(input[i])
}
【问题讨论】:
-
看看这个golang.org/pkg/sync/#WaitGroup。据了解,您总是希望正在运行的进程为 8。您可以通过等待组来实现这一目标
-
但是如果我调用
waitgroup.wait(),它会等待所有的goroutines完成。我只是希望它等待其中任何一个完成。显示golang.org/pkg/sync/#WaitGroup 的等待方法会一直等到正在运行的子进程为0。我想等到它小于8,而waitgroup 无法做到这一点。 -
从技术上讲,waitrgroup 会一直等待,直到其计数器为 0。计数器不是基于 goroutine 的数量,这只是建议的使用场景。它只是一个计数器,您可以使用
Add添加,使用Done递减,并使用Wait阻止直到计数器为0。您可以完全控制它。