一.WaitGroup是什么
WaitGroup 适用于同步多个goroutine之间的工作的
常见场景是我们会把任务拆分给多个goroutine并行完成。在完成之后需要合并这些任务的结果,或者需要等到所有小任务都完成才能进入下一步。
二.代码示例使用
func TestWaitGroup(t *testing.T) {
wg := sync.WaitGroup{}
var result int64 = 0
for i := 0; i < 10; i++ {
wg.Add(1)
go func(delta int) {
defer wg.Done()
atomic.AddInt64(&result, int64(delta))
}(i)
}
wg.Wait()
t.Log(result)
}
WaitGroup是用于同步多个goroutine之间工作的
1.要再开启goroutine之前先加1
2.每一个小任务完成就减1
3.调用Wait方法来等待所有子任务完成
容易犯错的地方是 +1 和 -1 不匹配(非常不好测试):
1.加多了导致Wait一直阻塞,引起goroutine泄露
2.减多了直接就panic
sync包—WaitGroup细节