猿问

使用多个 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()

它更快吗?


慕尼黑5688855
浏览 124回答 1
1回答

德玛西亚99

有些事情要清楚:你的两个例子都使用一个sync.WaitGroup,主要区别是工作的“分布”到goroutines。在您的第一个示例中,您有 2 个并发 goroutine 执行 2 个不同的工作(任务),而在第二个示例中,您有 1 个单个 goroutine 依次执行这两个任务,一个接一个。主要好处可能是2 个 goroutine 可以安排在 2 个 OS 线程中运行,这可能会利用 2 个独立的 CPU 内核,因此它可以更早/更快地完成。它是否提前完成以及完成多少取决于实际任务。这两个任务甚至可能相互依赖,所以如果你把它们放在一个 goroutine 上,它们可能永远不会完成。
随时随地看视频慕课网APP

相关分类

Go
我要回答