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)
}
 
 
推荐文章: