在 goroutine 中等待主线程睡眠

编写这个非常基本的代码来理解频道。

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

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

func main() {

    channel := make(chan int)

    go func() {

        time.Sleep(3*time.Second)

    }()


    for {

        fmt.Println("../");

        <-channel

    }

}


慕森卡
浏览 115回答 1
1回答

哆啦的时光机

我认为您的主线程正在等待来自频道的内容func main() {&nbsp; &nbsp; channel := make(chan int)&nbsp; &nbsp; go func() {&nbsp; &nbsp; &nbsp; &nbsp; time.Sleep(3*time.Second)&nbsp; &nbsp; &nbsp; &nbsp; channel <- 1 // Sending something to the channel to let the main thread continue&nbsp; &nbsp; &nbsp; &nbsp; channel <- 2&nbsp; &nbsp; }()&nbsp; &nbsp; for {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("../");&nbsp; &nbsp; &nbsp; &nbsp; <-channel // Waiting for something to come from the channel&nbsp; &nbsp; }}关于您的具体问题:如果一个 goroutine 中有等待,为什么 main goroutine 在等待它?它不等待它,它可能在通道上等待。我读到主 goroutine 需要等待时间,因为在调用 goroutine 后控件会立即传回给它。如果您的 main 没有在通道上等待(或堆栈在无限循环中),它已经完成并关闭了应用程序。GoRoutines 与主线程一起关闭(类似于 Java 守护线程)为什么goroutines不像java中的主线程和子线程那样可以并行运行?他们实际上做(:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go