基本概念

gamebus發表於2021-09-09

1 同步和非同步

同步和非同步關注的是訊息通訊機制
所謂同步,就是在發出一個呼叫時,在沒有得到結果之前,該呼叫就不返回。就是由呼叫者主動等待這個呼叫的結果。

而非同步則是相反,呼叫在發出之後,這個呼叫就會立即返回,所以沒有返回結果。換句話說,當一個非同步過程呼叫發出後,呼叫者不會立刻得到結果。而是在呼叫發出後,被呼叫者透過狀態、通知來通知呼叫者,或透過回撥函式處理這個呼叫。

舉個通俗的例子:
你打電話問書店老闆有沒有《分散式系統》這本書,如果是同步通訊機制,書店老闆會說,你稍等,”我查一下",然後開始查啊查,等查好了(可能是5秒,也可能是一天)告訴你結果(返回結果)。
而非同步通訊機制,書店老闆直接告訴你我查一下啊,查好了打電話給你,然後直接掛電話了(不返回結果)。然後查好了,他會主動打電話給你。在這裡老闆透過“回電”這種方式來回撥。

2 阻塞和非阻塞

通常用來形容多執行緒之間的相互影響.比如一個執行緒佔用了臨界區資源,那麼其他所有需要這個資源的執行緒就必須在這個臨界區進行等待,導致執行緒掛起,這就是阻塞.
非阻塞與之相反,強調沒有一個執行緒可以妨礙其他執行緒執行,所有執行緒都會嘗試不斷地前向執行.

3 5.死鎖(Deadlock),飢餓(Starvation)和活鎖(Livelock)

死鎖,飢餓,活鎖都屬於多執行緒情況下的執行緒活躍性問題

死鎖是指兩個或兩個以上的程式在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。
此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程式稱為死鎖程式。

飢餓指的是某一個或者多個執行緒無法獲得所需要的資源,導致一直無法執行。
可能的情況包括

  • 執行緒優先順序過低,高階的執行緒不斷搶佔它需要的資源

  • 某執行緒長時間佔用關鍵資源不放
    與死鎖相比,飢餓是可能在未來一段時間內解決的(比如高階執行緒完成任務,不再瘋狂的執行)

活鎖指的是執行緒都秉承著"謙讓"的原則,主動將資源釋放給他人使用,導致資源不斷在多個執行緒中跳動,沒有一個執行緒可以同時拿到所有的資源而正常執行.



作者:芥末無疆sss
連結:
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4687/viewspace-2816421/,如需轉載,請註明出處,否則將追究法律責任。