Thrift服務端的5種工作模式
Thrift是一個軟體框架,為服務端提供了多種工作模式,包括5種工作模式:TSimpleServer、TNonblockingServer、THsHaServer、TThreadPoolServer、TThreadSelectorServer。
TSimpleServer的工作模式只有一個工作線程,循環監聽新請求逇到來並完成對請求的處理,該模式採用最簡單的阻塞I/O,一次只能接收和處理一個Socket連接,效率比較低。
TNonblockingServer的工作模式也是單線程工作,但是該模式採用NIO的方式,所有的Socket都被註冊到Selector中,在一個線程上通過Selector循環監控所有的Socket,每次Selector結束時,處理所有的處於就緒狀態的Socket,對於有數據到來的Socket進行數據讀取操作,對於有數據發送的Socket則進行數據發送,對於監聽Socket則產生一個新業務Socket並將其註冊到Selector中。相比於TSimpleServer效率,提升主要體現在I/O多路復用上,TNonblockingServer採用非阻塞I/O,同時監控多個Socket的狀態變化。TNonblockingServer模式在業務處理上還是採用單線程順序來完成,在業務處理比較複雜、耗時的時候,例如某些介面函數需要讀取資料庫執行時間較長,此時該模式效率也不高,因為多個調用請求任務依然是順序一個接一個執行。
THsHaServer類是TNonblockingServer類的子類,在TNonblockingServer模式中,採用一個線程來完成對所有Socket的監聽和業務處理,造成了效率的底下,而THsHaServer模式中,引入一個線程池來專門進行業務處理。與TNonblockingServer模式相比,THsHaServer在完成數據讀取之後,將業務處理過程交由一個線程池來完成,主線程直接返回進行下一次循環操作,效率大大提升。但是主線程需要完成對所有Socket的監聽以及數據讀寫的工作,當並發請求數較多時,並且發送數據量較多時,監聽Socket上新連接請求不能被及時接受。
TThreadPoolServer模式採用阻塞Socket方式工作,主線程負責阻塞式監聽是否有新Socket到來,業務處理交由一個線程池來處理。線程池模式中,數據讀取和業務處理都交由線程池完成,主線程只負責監聽新連接,因此在並發量較大時新連接也能夠被及時接受。線程池模式比較適合伺服器端能預知最多有多少個客戶端並發的情況,這時每個請求都能被業務線程池及時處理,性能也非常高。
TThreadSelectorServer模式是目前Thrift提供的最高級的模式,內部包括以下幾個部分:
一個AcceptThread線程對象,專門用於處理監聽Socket上的新連接;
若干個SelectorThread對象專門用於處理業務Socket的網路I/O操作,所有網路數據的讀寫軍事由這些線程來完成;
一個負載均衡器SelectorThreadLoadBalancer對象,主要用於AcceptThread線程接收到一個新Socket連接請求時,決定將這個新連接請求分配給哪個SelectorThread線程。
一個ExecutorService類型的工作線程池,在SelectorThread線程中,監聽到有業務Socket中調用請求過來時,則將請求讀取之後,交給ExectorService線程池中的線程完成此次調用的具體執行。
TThreadSelectorServer模式中有一個專門的線程AcceptThread用於處理新連接請求,因此能夠及時響應大量並發連接請求;另外它將網路I/O操作分散到多個SelectorThread線程中來完成,因此能夠快速對網路I/O進行讀寫操作,能夠很好地應對網路I/O較大的情況。
發個小廣告!!!走過路過,不要錯過!新書來啦!!!
註:本公眾號與噹噹店鋪並無從屬關係,僅為大家提供一個便捷購物地址。若有所衝突,純屬巧合,立刪。
麥克叔叔每晚十點說
TAG:麥克叔叔每晚10點說 |