Golang协程调度,为什么这两个代码片段的结果一个有序一个无序?
问题一:为什么这两个代码片段的结果一个有序一个无序?
问题二:我查网上资料写着Go 协程调度不是随机的,但它也不是按顺序的。它是一种抢占式、工作窃取的调度模型,我没理解这和随机的有啥区别
代码片段一:输出的结果有序
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan struct{})
for i := 0; i < 10; i++ {
go func(num int) {
for {
<-ch
fmt.Println(num)
}
}(i)
time.Sleep(time.Millisecond)
}
time.Sleep(time.Second)
for j := 0; j < 10; j++ {
ch <- struct{}{}
time.Sleep(time.Millisecond)
}
time.Sleep(time.Minute)
}
代码片段二:输出的结果无序
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan struct{})
for i := 0; i < 10; i++ {
go func(num int) {
for {
<-ch
fmt.Println(num)
}
}(i)
time.Sleep(time.Millisecond)
}
time.Sleep(time.Second)
for j := 0; j < 10; j++ {
ch <- struct{}{}
}
time.Sleep(time.Minute)
}
推荐文章: