1 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個贊
您的循環(huán)啟動了 3 個調(diào)用該函數(shù)for
的 goroutine 。add
此外,main
它本身在一個單獨(dú)的“主”goroutine 中運(yùn)行。
由于 goroutines 并發(fā)執(zhí)行,它們的運(yùn)行順序通常是不可預(yù)測的,并且取決于時間、機(jī)器的繁忙程度等。運(yùn)行之間和機(jī)器之間的結(jié)果可能會有所不同。在不同的地方插入time.Sleep
呼叫可能有助于將其可視化。例如,time.Sleep
在“來到阻塞語句”之前插入 100ms 表明所有add
goroutines 啟動。
您在運(yùn)行中通常會看到一個add
goroutine 啟動,將其切片添加到其上并sum
寫入. 由于啟動了一些 goroutine 并立即從通道中讀取,因此該讀取獲取了寫入的內(nèi)容,然后程序就存在了——因?yàn)?strong>默認(rèn)情況下 main 不會等待所有 goroutine 完成。sum
dataChannel
main
sum
add
此外,由于dataChannel
通道是無緩沖的并且main
只讀取一個值,因此其他add
goroutine 將在寫入時無限期地阻塞在通道上。
- 1 回答
- 0 關(guān)注
- 139 瀏覽
添加回答
舉報