程序
func main() {
runtime.GOMAXPROCS(1)
wg := sync.WaitGroup{}
wg.Add(10)
for i := 0; i < 5; i++ {
go func() {
fmt.Println("go routine 1 i: ", i)
wg.Done()
}()
}
for i := 0; i < 5; i++ {
go func(i int) {
fmt.Println("go routine 2 i: ", i)
wg.Done()
}(i)
}
wg.Wait()
}
执行结果
go routine 2 i: 4
go routine 1 i: 5
go routine 1 i: 5
go routine 1 i: 5
go routine 1 i: 5
go routine 1 i: 5
go routine 2 i: 0
go routine 2 i: 1
go routine 2 i: 2
go routine 2 i: 3
疑问?
为什么先输出
go routine 2 i: 4
我搜索了好久,真是百思不得其(jie),大神,你怎么看?
原因
最后还阅读大神的文章,发现了原因 由一个问题引发的 goroutine 相关源码的探究 简单来说,就是如果当前的G的调度时间片还有时间,就会马上执行刚刚创建的G