关于Goroutine执行顺序

下面这段代码在设置了GOMAXPROCS为1后,为什么执行的结果是先打印出b,再打印出a,难道不是顺序执行吗?(go 版本:1.8)


func main() {
runtime.GOMAXPROCS(1)
var wg sync.WaitGroup
wg.Add(2)
go func() {
fmt.Println("a")
wg.Done()
}()
go func() {
fmt.Println("b")
wg.Done()
}()
wg.Wait()
}
已邀请:

simple - 分布式 & Java & Go

赞同来自: suc tanteng

我以前回答过 链接:这个问题 , 要想理解还是要看看Go并发调度器的实现的,雨痕老师的《Go语言学习笔记》是很好的资料。

yate1996

赞同来自:

同问~

SunisDown - @douban

赞同来自:

不是顺序执行。

TavenLi

赞同来自:

在只有一个CPU工作的时候,永远是最后一个先执行
剩下的按顺序执行
怪怪的

cloverstd -

赞同来自:

因为 main 也是放在 goroutine 里执行的

tanteng - 89

赞同来自:

同问,有终结答案吗

tanteng - 89

赞同来自:

https://play.golang.org/p/UrUk7Agefo


正准备问这个问题


package main

import (
"fmt"
"runtime"
"sync"
)

var wg sync.WaitGroup

func main() {
runtime.GOMAXPROCS(1)

wg.Add(100)

for i := 1; i <= 100; i++ {
go test(i)
}

wg.Wait()
}

func test(index int) {
fmt.Println(index)
wg.Done()
}

要回复问题请先登录注册