go - 在同一个 goroutines 中创建的 goroutines 是否总是按顺序执行?

标签 go goroutine

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/

相关文章:

go - main 只是一个普通的 goroutine 吗?

go - 选择 channel 时陷入死锁

go 例程被阻止

go - 停止正在运行的 goroutine

go - 在 Golang 中定期爬取 API

去绝对进口和Travis CI

分块 `http.GET` 和 Goamz `multi.PutAll` 的 Golang 分段上传

json - AppEngine Go 应用程序中的奇怪行为

mongodb - 使用 session 的官方 mongo-go-driver

amazon-web-services - Auth0 不适用于 Docker 容器 + Elastic beanstalk