编写这个非常基本的代码来理解频道。如果一个 goroutine 中有等待,为什么 main goroutine 在等待它?我读到主 goroutine 需要等待时间,因为在调用 goroutine 后控件会立即传回给它。为什么goroutines不像java中的主线程和子线程那样可以并行运行?func main() { channel := make(chan int) go func() { time.Sleep(3*time.Second) }() for { fmt.Println("../"); <-channel }}
1 回答
哆啦的时光机
TA贡献1779条经验 获得超6个赞
我认为您的主线程正在等待来自频道的内容
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 中有等待,为什么 main goroutine 在等待它?
它不等待它,它可能在通道上等待。
我读到主 goroutine 需要等待时间,因为在调用 goroutine 后控件会立即传回给它。
如果您的 main 没有在通道上等待(或堆栈在无限循环中),它已经完成并关闭了应用程序。GoRoutines 与主线程一起关闭(类似于 Java 守护线程)
为什么goroutines不像java中的主线程和子线程那样可以并行运行?
他们实际上做(:
- 1 回答
- 0 关注
- 114 浏览
添加回答
举报
0/150
提交
取消