编写此非常基本的代码以了解频道。
如果goroutine中有等待,为什么主goroutine正在等待它?我了解到主goroutine需要等待一段时间,因为调用goroutine之后,控件会立即传递回去。
为什么goroutine不能像Java中的主线程和子线程那样设计为可以并行运行?
func main() {
channel := make(chan int)
go func() {
time.Sleep(3*time.Second)
}()
for {
fmt.Println("../");
<-channel
}
}
答案 0 :(得分:3)
我认为您的主线程正在等待来自渠道的消息
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?
他们实际上是这样做的(: