我见过等待一组 goroutine 完成的代码:var wg sync.WaitGroupwg.Add(2)go func() { // Do work. wg.Done()}()go func() { // Do some other work. wg.Done()}()wg.Wait()这样做的主要好处是什么,而不是让我们说:var wg sync.WaitGroupwg.Add(1)go func() { // Do work. // Do some more work here instead. wg.Done()}()wg.Wait()它更快吗?
1 回答
德玛西亚99
TA贡献1770条经验 获得超3个赞
有些事情要清楚:你的两个例子都使用一个sync.WaitGroup
,主要区别是工作的“分布”到goroutines。
在您的第一个示例中,您有 2 个并发 goroutine 执行 2 个不同的工作(任务),而在第二个示例中,您有 1 个单个 goroutine 依次执行这两个任务,一个接一个。
主要好处可能是2 个 goroutine 可以安排在 2 个 OS 线程中运行,这可能会利用 2 个独立的 CPU 内核,因此它可以更早/更快地完成。它是否提前完成以及完成多少取决于实际任务。
这两个任务甚至可能相互依赖,所以如果你把它们放在一个 goroutine 上,它们可能永远不会完成。
- 1 回答
- 0 关注
- 123 浏览
添加回答
举报
0/150
提交
取消