使用多个 goroutine 的好处
Benefit of using multiple goroutines
我看过等待一组 goroutine 完成的代码:
var wg sync.WaitGroup
wg.Add(2)
go func() {
// Do work.
wg.Done()
}()
go func() {
// Do some other work.
wg.Done()
}()
wg.Wait()
这样做的主要好处是什么,而不是说:
var wg sync.WaitGroup
wg.Add(1)
go func() {
// Do work.
// Do some more work here instead.
wg.Done()
}()
wg.Wait()
是否更快?
需要澄清的一些事情:您的两个示例都使用单个 sync.WaitGroup
, the main difference is the "distribution" of work to goroutines.
在您的第一个示例中,您有 2 个并发的 goroutine 执行 2 个不同的工作(任务),而在第二个示例中,您有一个单个的 goroutine 一个接一个地依次执行这两个任务。
主要好处可能是 2 个 goroutines 可以被调度到 运行 在 2 OS 个线程中,这可能利用 2 个单独的 CPU 核心,因此它可能会更早/更快完成。是否提前完成以及完成多少取决于实际任务。
这 2 个任务甚至可能 相互依赖,因此如果将它们放在一个 goroutine 上,它们可能永远无法完成。
我看过等待一组 goroutine 完成的代码:
var wg sync.WaitGroup
wg.Add(2)
go func() {
// Do work.
wg.Done()
}()
go func() {
// Do some other work.
wg.Done()
}()
wg.Wait()
这样做的主要好处是什么,而不是说:
var wg sync.WaitGroup
wg.Add(1)
go func() {
// Do work.
// Do some more work here instead.
wg.Done()
}()
wg.Wait()
是否更快?
需要澄清的一些事情:您的两个示例都使用单个 sync.WaitGroup
, the main difference is the "distribution" of work to goroutines.
在您的第一个示例中,您有 2 个并发的 goroutine 执行 2 个不同的工作(任务),而在第二个示例中,您有一个单个的 goroutine 一个接一个地依次执行这两个任务。
主要好处可能是 2 个 goroutines 可以被调度到 运行 在 2 OS 个线程中,这可能利用 2 个单独的 CPU 核心,因此它可能会更早/更快完成。是否提前完成以及完成多少取决于实际任务。
这 2 个任务甚至可能 相互依赖,因此如果将它们放在一个 goroutine 上,它们可能永远无法完成。