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

mu_fan · · 2696 次点击
并不是顺序执行,而是 3,1,2 这样,比如 4 个协程,就会是 4,1,2,3
#7
更多评论
buscoop
纸上得来终觉浅,绝知此事要躬行!
Goroutine is unordered
#1
每个goroutine都有自己的栈,在创建goroutine时,就要同时创建对应的栈。那么可知goroutine在执行时,栈空间会不停增长。 runtime.GOMAXPROCS(1) 只会创建一个goroutine,两个go func(){}(),就会出现压栈,出栈,所以后面的会先打印。 如果你改成runtime.GOMAXPROCS(2) 或者大于2 的值,wg.Done() 改为 defer wg.Done(),就会无序输出
#2