1. 首页
  2. 主题
  3. Go问与答

go语言实战中第6章并发中实例,1个逻辑处理器的时候为什么后面的goroutine先执行呢???

mu_fan · · 3255 次点击
![image.png](https://static.studygolang.com/180412/84a094146513c761df58c68c95dd2c8b.png) 这个程序为什么会先输出大写字母呢,书上说第一个goroutine完成所有显示需要花时间太短了,以至于在调度器切换到第二个goroutine之前,就完成了所有的任务,按照这样说也应该是先输出小写字母才对啊??? 求解答,谢谢
只有一个P 的话根本不会触发调度, 会将P所关联的goruntine队列里面的goruntine 一次执行, 我理解这个队列应该是一个栈结构(后进先出), 所以最后被加到这个栈的goruntine最先被执行
#6
更多评论
buscoop
纸上得来终觉浅,绝知此事要躬行!
Goroutine is unordered
#1
每个goroutine都有自己的栈,在创建goroutine时,就要同时创建对应的栈。那么可知goroutine在执行时,栈空间会不停增长。 runtime.GOMAXPROCS(1) 只会创建一个goroutine,两个go func(){}(),就会出现压栈,出栈,所以后面的会先打印。 如果你改成runtime.GOMAXPROCS(2) 或者大于2 的值,wg.Done() 改为 defer wg.Done(),就会无序输出
#2

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中