編寫這個非?;镜拇a來理解頻道。如果一個 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 關注
- 142 瀏覽
添加回答
舉報
0/150
提交
取消