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

在 goroutine 中等待主线程睡眠

在 goroutine 中等待主线程睡眠

Go
慕森卡 2023-06-01 18:24:00
编写这个非常基本的代码来理解频道。如果一个 goroutine 中有等待,为什么 main goroutine 在等待它?我读到主 goroutine 需要等待时间,因为在调用 goroutine 后控件会立即传回给它。为什么goroutines不像java中的主线程和子线程那样可以并行运行?func main() {    channel := make(chan int)    go func() {        time.Sleep(3*time.Second)    }()    for {        fmt.Println("../");        <-channel    }}
查看完整描述

1 回答

?
哆啦的时光机

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

我认为您的主线程正在等待来自频道的内容


func main() {

    channel := make(chan int)

    go func() {

        time.Sleep(3*time.Second)

        channel <- 1 // Sending something to the channel to let the main thread continue

        channel <- 2

    }()


    for {

        fmt.Println("../");

        <-channel // Waiting for something to come from the channel

    }

}

关于您的具体问题:

如果一个 goroutine 中有等待,为什么 main goroutine 在等待它?

它不等待它,它可能在通道上等待。

我读到主 goroutine 需要等待时间,因为在调用 goroutine 后控件会立即传回给它。

如果您的 main 没有在通道上等待(或堆栈在无限循环中),它已经完成并关闭了应用程序。GoRoutines 与主线程一起关闭(类似于 Java 守护线程)

为什么goroutines不像java中的主线程和子线程那样可以并行运行?

他们实际上做(:


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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信