在 goroutine 中等待具有睡眠状态的主线程



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

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

  2. 为什么 goroutines 的设计不像 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需要等待时间,因为 在调用 GoRoutine 后,控制权会立即传递回它。

如果您的主节点没有在通道上等待(或无限循环中的堆栈),它已经完成并关闭了应用程序。GoRoutines 以主线程关闭(如 Java 守护进程线程)

为什么 goroutines 的设计不像主线程和子线程 Java在哪里可以并行运行?

他们实际上确实(:

最新更新