1 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
僅僅因?yàn)閷懭氩荒芰⒓闯晒?,只要有其他可以運(yùn)行的goroutine,您就不會(huì)收到“死鎖”錯(cuò)誤。
讓我們想象一下一個(gè)調(diào)度模型,其中一個(gè)go
函數(shù)立即啟動(dòng)goroutine,并在屈服于他人之前盡其所能地向前推進(jìn)。然后會(huì)發(fā)生這種情況:
該程序?qū)⒄{(diào)用
sum()
列表的前半部分,計(jì)算總和,然后嘗試將其寫入通道,但是由于沒有偵聽器,它將阻塞。該程序?qū)⒄{(diào)用
sum()
列表的后半部分,計(jì)算總和,然后嘗試將其寫入通道,但是由于沒有偵聽器,它將阻塞。main()
會(huì)嘗試從通道讀取數(shù)據(jù),喚醒之前的goroutine之一,并從中獲取值。main()
將嘗試從通道讀取數(shù)據(jù),喚醒另一個(gè)阻塞的goroutine,并從中獲取值。不再有人阻塞通道輸入或輸出,所有g(shù)oroutine(包括
main()
)都可以運(yùn)行完畢。
如果您假裝go
只是在后臺(tái)安排一些時(shí)間并繼續(xù)運(yùn)行主goroutine,則可以執(zhí)行相同的練習(xí)。重要的是,一旦在同一通道上進(jìn)行成對(duì)的讀取和寫入,兩者都將繼續(xù)進(jìn)行。
- 1 回答
- 0 關(guān)注
- 271 瀏覽
添加回答
舉報(bào)