1.不使用waitGroup的时候,使用sleep粗糙等待协程
sleep的方式明显的弊端在于,时间是等待1s,100s,1000s ??? 自己是无法精准估算的
那有什么办法可以解决这个【不知道传多少时间】的问题???
答案:使用 waitGroup
func main() {
for i := 0; i < 100; i++ {
go func(i int) {
fmt.Println(i)
}(i)
}
time.Sleep(1 * time.Second)
}
2.使用waitGroup精准等待协程执行
wg.Add(100) 相当于告诉调度器,即将要开100个go协程
wg.Done( ) 相当于告诉调度器,1个go协程执行完毕【会在100里面减1】
wg.Wait( ) 相当于告诉调度器,main协程等待时间到【查看100是不是减到0】
func main() {
var wg sync.WaitGroup
wg.Add(100)
for i := 0; i < 100; i++ {
go func(i int) {
fmt.Println(i)
wg.Done()
}(i)
}
wg.Wait()
}
如果100无法提前得知,那么一般会采用启动一个协程,wg.Add(1)一下来逐渐达到总协程数100
func main() {
var wg sync.WaitGroup
for i := 0; i < 100; i++ {
go func(i int) {
wg.Add(1)
fmt.Println(i)
wg.Done()
}(i)
}
wg.Wait()
}