golang - 一道流传的go面试题
本文介绍了golang - 一道流传的go面试题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
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...
这篇关于golang - 一道流传的go面试题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文