為什麼同樣是從空的通道中取值,行為卻不一樣?

時間 2021-05-31 09:38:21

1樓:原子筆

所有routine都在等鎖或者等channle goruntime才認為死鎖。

等待系統事件,如io事件,定時器事件,這叫阻塞不叫死鎖。

本質把核心也當routine了,核心當然不會反過來等使用者態的東西,當然不會迴圈依賴,不會死鎖啦

2樓:buckethead

fatal error: all goroutines are asleep - deadlock!

這個報錯的主要資訊說的是所有的routine都是asleep, 這種情況下一定是死鎖.

等待計時器的routine是阻塞狀態, 但是計時的routine不是asleep狀態

3樓:靈劍

我不是go的專家,不過這個機制應該很好理解,萬一說錯了請其他人糾正。

我們知道goroutine實際上是通過go執行時內部排程的,一旦goroutine開始某個等待操作(比如等待乙個channel),它就會被執行時掛起,直到它等待的條件被滿足為止,在這個過程中,go執行時會排程其他的goroutine。如果沒有任何可以排程的goroutine,那麼就等待socket活動或者某個定時器到時間。

那麼問題來了,如果現在有goroutine,但是所有的goroutine都被掛起了,也沒有活動的socket,然後也沒有定時器呢?

這種狀態就叫做死鎖,排程器在這種情況下沒有辦法再執行任何動作了,唯一合理的動作就是panic退出。

反過來,如果至少還有乙個定時器在工作,那麼等這個定時器時間到了之後,也許就有goroutine活過來了呢?那自然就不是死鎖狀態。

實際上我們可以看出,這個辦法並不能檢測出所有的死鎖,如果某兩個goroutine互相死鎖了,但其他的goroutine還活著,golang就不會檢測出死鎖狀態;不過本來檢測死鎖就不是這個設計的目標,這個設計只是為了在徹底死鎖的情況下立即panic而已,部分死鎖了湊合用著沒毛病。

同樣是空砍,為什麼很少有人黑濃眉,表妹。而要屠龜。?

OIRE 主要瓜椒球迷多啊再加上雷霆關注度也要比鵜鶘高 再加上上個賽季超神的發揮,這賽季來了倆大佬結果戰績不行,三位資料也不如以前 想要鵜鶘戰績變好需要一下幾個操作 1.解雇金特里 我不管金特里是不是給老闆擋過槍還是擋過義大利炮甚至擋過原子彈,如果鵜鶘戰績想變好真的趕緊解雇這貨吧 說實話我以為今年第...

同樣是劣跡藝人,吳京酒駕行拘出來後為什麼能復出?

今時我去也 我也很奇怪,為什麼張某拖行交警,李某某被北京市交通局通報兩項交通違法不被拿出來說,反而吳京在喊了代駕,應保安要求挪車被抓,被拿出來擋呢? 明月當空 時代不同了。吳京酒駕是2006年,那時候官方還沒有劣跡藝人這一說。現在是官方明確認定劣跡藝人,而且最關鍵的是大眾對明星態度的轉變,不在盲從。...

同樣是法西斯,為什麼JOJO中的修特羅海姆被很多人喜歡,而我英就被封閉了呢?

St Shaytan 其實乙個很根本性的問題在於圈子構成很不同,JOJO再怎麼dssq,再怎麼Jo小鬼氾濫,也遠不至於到飯圈化那種程度。飯圈學院麼 自然是飯圈行為乙個不少,在我有限的認知範圍內大概也能排得上第二了 當然麼 圈子構成的根源自然也是在作品,而且這裡面也不能說完全是作者實力問題,相當程度上...