编写了这个非常基本的代码来理解频道。
-
如果 goroutine 中有等待,为什么主 goroutine 在等待它?我读到主 goroutine 需要等待时间,因为控件在调用 goroutine 后立即传递回它。
-
为什么 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在哪里可以并行运行?
他们实际上确实(: