1. 程式人生 > >Leader-Follower執行緒模型概述

Leader-Follower執行緒模型概述

一、前言

IO執行緒模型一直在演化,由最開始的單執行緒模型,到BIO方式的單執行緒接受請求執行緒池執行緒具體處理單個請求的讀寫事件,再到NIO的單執行緒接受請求執行緒池裡面的單個執行緒可以處理不同請求的讀寫事件,一個字沒有最快,只有更快。最近發現還有個Leader-follower執行緒模型,其的出現是為了解決單執行緒接受請求執行緒池執行緒處理請求下執行緒上下文切換以及執行緒間通訊資料拷貝的開銷,並且不需要維護一個佇列。

二、Leader-follower執行緒模型

image.png
  • 在Leader-follower執行緒模型中每個執行緒有三種模式,leader,follower, processing。
  • 在Leader-follower執行緒模型一開始會建立一個執行緒池,並且會選取一個執行緒作為leader執行緒,leader執行緒負責監聽網路請求,其它執行緒為follower處於waiting狀態,當leader執行緒接受到一個請求後,會釋放自己作為leader的權利,然後從follower執行緒中選擇一個執行緒進行啟用,然後啟用的執行緒被選擇為新的leader執行緒作為服務監聽,然後老的leader則負責處理自己接受到的請求(現在老的leader執行緒狀態變為了processing),處理完成後,狀態從processing轉換為。follower

可知這種模式下接受請求和進行處理使用的是同一個執行緒,這避免了執行緒上下文切換和執行緒通訊資料拷貝。

三、總結

本文作為筆記,記錄了Leader-follower執行緒模型原理,後期有時間寫個關於BIO,NIO,LF模型的比較,敬請期待。

Java 併發程式設計之美-高階篇之三
本 Chat 作為 Java 併發程式設計之美系列的高階篇之三,主要講解鎖,內容如下:

  • 抽象同步佇列 AQS (AbstractQueuedSynchronizer)概述,AQS 是實現同步的基礎元件,併發包中鎖的實現底層就是使用 AQS 實現,雖然大多數開發者可能從來不會直接用到 AQS,但是知道其原理對於架構設計還是很有幫助的。
  • 獨佔鎖 ReentrantLock 原理探究,ReentrantLock 是可重入的獨佔鎖或者叫做排它鎖,同時只能有一個執行緒可以獲取該鎖,其實現分為公平與非公平的獨佔鎖。
  • 讀寫鎖 ReentrantReadWriteLock 原理,ReentrantLock 是獨佔鎖,同時只有一個執行緒可以獲取該鎖,而實際情況下會有寫少讀多的場景,顯然 ReentrantLock 滿足不了需求,所以 ReentrantReadWriteLock 應運而生,本文來介紹讀寫分離鎖的實現。
  • StampedLock 鎖原理探究,StampedLock 是併發包裡面 jdk8 版本新增的一個鎖,該鎖提供了三種模式的讀寫控制。

歡迎微信識別二維碼加入,另外敬請期待併發程式設計之美一書的出版

121.jpg