使用多个 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 上,它们可能永远无法完成。