为了账号安全,请及时绑定邮箱和手机立即绑定

一道流传的go面试题

一道流传的go面试题

潇潇雨雨 2018-08-03 17:09:23
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)


查看完整回答
反对 回复 2018-08-05
  • 2 回答
  • 0 关注
  • 1358 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信