讨论数量:
这个和GMP调度模型有关,假如:go_1 先被入队、go_2 后被入队、go_3最后入队,让后调度器还在go_3这里进行调度,调度完成后按顺序执行
package main
import (
"fmt"
"runtime"
)
func main() {
runtime.GOMAXPROCS(1)
for i := 0; i < 1000; i++ {
OrderPrint()
fmt.Println("---")
}
}
func OrderPrint() {
ch := make(chan int, 10)
for i := 1; i <= 3; i++ {
go func(i int) {
ch <- i
}(i)
}
for i := 0; i < 3; i++ {
fmt.Println(<-ch) // 3 1 2
}
}
非常奇怪, 我本地(go.1.22)一直是 3,1,2
换playground 第一次 3,2,1 后面重复run 一直是 3,1,2
重新进playground 第一次 3,2,1
推荐文章: