runtime.Gosched到底做什么?

在Tour of Go网站的go 1.5发行之前的版本中,有一段代码看起来像这样。


package main


import (

    "fmt"

    "runtime"

)


func say(s string) {

    for i := 0; i < 5; i++ {

        runtime.Gosched()

        fmt.Println(s)

    }

}


func main() {

    go say("world")

    say("hello")

}

输出看起来像这样:


hello

world

hello

world

hello

world

hello

world

hello

令我困扰的是,runtime.Gosched()将其删除后,该程序不再显示“世界”。


hello

hello

hello

hello

hello

为什么会这样?如何runtime.Gosched()影响执行力?


狐的传说
浏览 196回答 2
2回答

喵喵时光机

合作计划是罪魁祸首。如果不屈服,则另一个(例如“世界”)goroutine可能合法地在main终止之前/之时获得零执行机会,根据规范,终止所有goroutine的时间即为-&nbsp;整个过程。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go