为了账号安全,请及时绑定邮箱和手机立即绑定

当没有线路调用它时,控制如何转到主 goroutine?

当没有线路调用它时,控制如何转到主 goroutine?

Go
慕码人2483693 2022-06-06 16:08:48
// _Closing_ a channel indicates that no more values// will be sent on it. This can be useful to communicate// completion to the channel's receivers.package mainimport "fmt"// In this example we'll use a `jobs` channel to// communicate work to be done from the `main()` goroutine// to a worker goroutine. When we have no more jobs for// the worker we'll `close` the `jobs` channel.func main() {    jobs := make(chan int, 5)    done := make(chan bool)    fmt.Println("1")    go func() {        for {                fmt.Println("4")            j, more := <-jobs            if more {                fmt.Println("received job", j)            } else {                fmt.Println("received all jobs")                done <- true                return            }        }    }()    fmt.Println("2")    // This sends 3 jobs to the worker over the `jobs`    // channel, then closes it.    for j := 1; j <= 3; j++ {            fmt.Println("3", j)        jobs <- j        fmt.Println("sent job", j)    }    fmt.Println("5")    close(jobs)    fmt.Println("6")    fmt.Println("sent all jobs")    //How does control go from here to the main's go routine - line 18. Who call's it? and How?    // We await the worker using the    // [synchronization](channel-synchronization) approach    // we saw earlier.    <-done    fmt.Println("7")}https://play.golang.org/p/Xe_wh3YTmwk控制如何从第 46 行转到第 18 行?
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

当您将 Go 应用程序编译为可执行二进制文件时,编译器会在二进制文件中包含一个运行时。运行您的应用程序时,此运行时负责调度和运行 goroutine。

在第 17 行中,您启动了一个 goroutine,因此运行时将安排与maingoroutine 并发运行它,并且可能并行运行(如果有足够的内核并且 GOMAXPROCS 允许,有关详细信息,请参阅Concurrency is not parallelism)。

规范:Go 语句:

函数值和参数在调用 goroutine 中像往常一样被评估,但与常规调用不同,程序执行不会等待调用的函数完成。相反,该函数开始在一个新的 goroutine 中独立执行。当函数终止时,它的 goroutine 也会终止。如果函数有任何返回值,它们会在函数完成时被丢弃。


查看完整回答
反对 回复 2022-06-06
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号