登录
首页 >  Golang >  Go问答

在 goroutine 中通过 sleep 等待主线程

来源:stackoverflow

时间:2024-04-15 19:00:35 126浏览 收藏

你在学习Golang相关的知识吗?本文《在 goroutine 中通过 sleep 等待主线程》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

编写这段非常基本的代码来理解渠道。

  1. 如果 goroutine 中有等待,为什么主 goroutine 会等待它?我读到主 goroutine 需要有一个等待时间,因为调用 goroutine 后控制权会立即传回给它。

  2. 为什么 goroutine 没有像 java 中的主线程和子线程那样设计,可以并行运行?

func main() {
    channel := make(chan int)
    go func() {
        time.Sleep(3*time.Second)
    }()

    for {
        fmt.Println("../");
        <-channel
    }
}

解决方案


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

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中有等待,为什么主goroutine还在等待 就在上面吗?

它不会等待,它可能在频道上等待。

我读到主协程需要有一个等待时间,因为 调用 goroutine 后,控制权会立即传回给它。

如果您的主程序没有在通道上等待(或在无限循环中堆栈),那么它已经完成并关闭了应用程序。 goroutines 随主线程关闭(如 java 守护线程)

为什么 goroutine 的设计不像主线程和子线程那样 java哪里可以并行运行?

他们确实这样做了(:

好了,本文到此结束,带大家了解了《在 goroutine 中通过 sleep 等待主线程》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>