golang协程调度,为什么这两个代码片段的结果一个有序一个无序? | go | go 技术论坛-江南app体育官方入口
问题一:为什么这两个代码片段的结果一个有序一个无序?
问题二:我查网上资料写着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)
}
推荐文章: