package main
func main() {
c:=make(chan int)
for i:=0; i<=100;i++ {
i:=i
go func() {
c<-i
}()
}
for {
b:=<-c
println(b)
if b==100 {
break
}
}
}
上面的代码创建了 100 个 goroutines 将 num 插入 channel c,所以我想知道,这些 goroutines 会随机执行吗?在我的测试中,输出总是 1 到 100
最佳答案
不,不能保证它们按顺序运行。使用 GOMAXPROCS=1
(默认值)时,它们似乎可以,但语言规范不能保证这一点。
当我用 GOMAXPROCS=6
运行你的程序时,输出是不确定的:
$ GOMAXPROCS=6 ./test
2
0
1
4
3
5
6
7
8
9
...
在另一次运行中,输出略有不同。
如果您希望 channel 上的一组发送按顺序发生,最好的解决方案是从同一个 goroutine 执行它们。
关于go - 在同一个 goroutines 中创建的 goroutines 是否总是按顺序执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29057210/