我们都知道,在golang中很容易实现并发,只需要一个关键字go
就可以。但是在开启了多个goruntine之后,我们要如何去管理它们呢(包括停止退出goroutine,等待goruntine执行完成,继续让goruntine执行等)。这些我们在日常的业务中都可能碰到,下面就讲讲在不同的场景如何正确优雅地管理goruntine,即控制并发。
一,sync.WaitGroup
作用: 任务编排,等待多个 goroutine 全部完成
适用场景: 好多个 goroutine 协同做一件事情的时候,因为每个 goroutine 做的都是这件事情的一部分,只有全部的 goroutine 都完成,这件事情才算是完成,这是等待的方式。
func main() {
var wg sync.WaitGroup
wg.Add(2)
go func() {
time.Sleep(2 * time.Second)
fmt.Println("1号完成")
wg.Done()
}()
go func() {
time.Sleep(2 * time.Second)
fmt.Println("2号完成")
wg.Done()
}()
wg.Wait(