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语句函数的执行顺序就乱了呢?
2 回答
胡说叔叔
TA贡献1804条经验 获得超8个赞
你这拷贝的没错吗?第一个loop里面的func用的是out scope的i?那么这个i应该是不会变的啊。
另外GOMAXPROCS
不能保证顺序,只能保证用户代码用几个线程跑,1不代表顺序!
要知道并发不等于平行(中文真不好翻: concurrent is not parallel)
添加回答
举报
0/150
提交
取消