hoho,這個線程模型有點意思

Leader-Follower 是一種經典的多線程模型。

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

關鍵點一:線程三種狀態。

(1)領導中,leading;

(2)處理中,processing;

(3)追隨中,following;

關鍵點二:N 個線程狀態各異。

(1)只有 1 個 leading 線程(等待任務);

(2)有 x 個 processing 線程(處理);

(3)有 N-1-x 個 following 線程(空閒);

關鍵點三:有一把鎖,誰搶到就是 leading。

關鍵點四:事件 / 任務來到時,leading 線程會對其進行處理,從而轉化爲 processing 狀態,處理完成之後,又轉變爲 following。

關鍵點五:丟失 leading 後,following 會嘗試搶鎖,搶到則變爲 leading,否則保持 following。

關鍵點六:following 不幹事,就是搶鎖,力圖成爲 leading。

這個線程模型有什麼優點?
不需要消息隊列。

這個線程模型適用什麼場景?

線程能夠很快的完成工作任務。

有人說 “併發量大時,L/F 的鎖容易成爲系統瓶頸,需要引入一個消息隊列解決。” 此觀點不對,一個消息隊列,其仍是臨界資源,仍需要一把鎖來保證互斥,只是鎖競爭從 leading 移到了消息隊列上,此時消息隊列僅僅只能起到消息緩衝的作用。

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

F-L 線程模型,你有使用過麼?

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/2-sHXKDZ5D7xBGXt5OWvVg