【轉】Leader-Follower線程模型

上圖就是L/F多線程模型的狀態變遷圖,共6個關鍵點:多線程

(1)線程有3種狀態:領導leading,處理processing,追隨following併發

(2)假設共N個線程,其中只有1個leading線程(等待任務),x個processing線程(處理),餘下有N-1-x個following線程(空閒)線程

(3)有一把鎖,誰搶到就是leadingblog

(4)事件/任務來到時,leading線程會對其進行處理,從而轉化爲processing狀態,處理完成以後,又轉變爲following隊列

(5)丟失leading後,following會嘗試搶鎖,搶到則變爲leading,不然保持following事件

(6)following不幹事,就是搶鎖,力圖成爲leading資源

 

優勢:不須要消息隊列消息隊列

 

適用場景:線程可以很快的完成工做任務im

 

有人說「併發量大時,L/F的鎖容易成爲系統瓶頸,須要引入一個消息隊列解決。」img

 

此觀點不對,一個消息隊列,其還是臨界資源,仍須要一把鎖來保證互斥,只是鎖競爭從leading移到了消息隊列上,此時消息隊列僅僅只能起到消息緩衝的做用。

 

根本解決方案是下降鎖粒度(例如多個隊列)。

相關文章
相關標籤/搜索