func test_gomaxprocs() {
runtime.GOMAXPROCS(1)
wg := sync.WaitGroup{}
wg.Add(20)
for i := 0; i < 10; i++ {
go func() {
fmt.Println("i:", i)
defer wg.Done()
}()
}
for i := 0; i < 10; i++ {
go func(i int) {
fmt.Println("j: ", i)
defer wg.Done()
}(i)
}
//sleep
wg.Wait()
}
我google到一个外国人写的文章,说设置CPU数目为1后,go语句函数是按顺序依次执行的。 我在wg.Wait()前sleep下,得到的输出确实是依次执行的。但是我疑惑的是,为什么已进入wg.Wait(),go语句函数的执行顺序就乱了呢?
这个问题,time.Sleep应该是在main goroutine里执行的,至于顺序是goroutine内部调度问题,CPU到底分给了哪个goroutine这个内部控制的。这个结果和是否执行sleep应该没有必然的联系。
至于Go的调度器相关,可以看下这个文档:https://www.douban.com/note/3...