func Wg() {
wg := &sync.WaitGroup{}
go wgCore(1, wg)
go wgCore(2, wg)
go wgCore(3, wg)
wg.Wait()
}
func wgCore(i int64, wg *sync.WaitGroup) {
wg.Add(1)
defer wg.Done()
fmt.Println(i)
}
当我调用Wg()的时候并没有得到如期的结果,我知道问题出在 wg.Add(1)上,我也知道修改为以下代码结果就如预期了
func Wg() {
wg := &sync.WaitGroup{}
wg.Add(3)
go wgCore(1, wg)
go wgCore(2, wg)
go wgCore(3, wg)
wg.Wait()
}
func wgCore(i int64, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Println(i)
}
但是不知道该怎么解释,还靠各位大佬指点!
###你不事先设置add的值的话,而是分批add的话,wg.Wait()无法判断是否add结束,所以没有在你的预期内
###启动goroutine是有开销的,虽然时间很短但是也不能认为可以忽略。
因此第一段代码中第三个go后面你休息一秒钟就符合预期了
goroutine 执行速度问题