日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

由浅入深了解Thrift(三)——Thrift server端的几种工作模式分析

發(fā)布時(shí)間:2024/9/30 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 由浅入深了解Thrift(三)——Thrift server端的几种工作模式分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://blog.csdn.net/houjixin/article/details/42779915


五、??Thrift服務(wù)器端幾種工作模式分析與總結(jié)

Thrift為服務(wù)器端提供了多種工作模式,本文中將涉及以下5中工作模式:TSimpleServer、TNonblockingServer、THsHaServer、TThreadPoolServer、TThreadedSelectorServer,這5中工作模式的詳細(xì)工作原理如下:

1.????? TSimpleServer模式

TSimpleServer的工作模式只有一個(gè)工作線程,循環(huán)監(jiān)聽(tīng)新請(qǐng)求的到來(lái)并完成對(duì)請(qǐng)求的處理,它只是在簡(jiǎn)單的演示時(shí)候使用,它的工作方式如圖5.1所示:


圖5.1 TSimpleServer的工作模式

TSimpleServer的工作模式采用最簡(jiǎn)單的阻塞IO,實(shí)現(xiàn)方法簡(jiǎn)潔明了,便于理解,但是一次只能接收和處理一個(gè)socket連接,效率比較低,主要用于演示Thrift的工作過(guò)程,在實(shí)際開(kāi)發(fā)過(guò)程中很少用到它。

2.????? TNonblockingServer模式

TNonblockingServer工作模式,該模式也是單線程工作,但是該模式采用NIO的方式,所有的socket都被注冊(cè)到selector中,在一個(gè)線程中通過(guò)seletor循環(huán)監(jiān)控所有的socket,每次selector結(jié)束時(shí),處理所有的處于就緒狀態(tài)的socket,對(duì)于有數(shù)據(jù)到來(lái)的socket進(jìn)行數(shù)據(jù)讀取操作,對(duì)于有數(shù)據(jù)發(fā)送的socket則進(jìn)行數(shù)據(jù)發(fā)送,對(duì)于監(jiān)聽(tīng)socket則產(chǎn)生一個(gè)新業(yè)務(wù)socket并將其注冊(cè)到selector中,如下圖5.2所示:


圖5.2、TNonblockingServer工作模式

上圖5.2中讀取數(shù)據(jù)之后的業(yè)務(wù)處理就是根據(jù)讀取到的調(diào)用請(qǐng)求,調(diào)用具體函數(shù)完成處理,只有完成函數(shù)處理才能進(jìn)行后續(xù)的操作;

TNonblockingServer模式優(yōu)點(diǎn):

相比于TSimpleServer效率提升主要體現(xiàn)在IO多路復(fù)用上,TNonblockingServer采用非阻塞IO,同時(shí)監(jiān)控多個(gè)socket的狀態(tài)變化;

TNonblockingServer模式缺點(diǎn):

TNonblockingServer模式在業(yè)務(wù)處理上還是采用單線程順序來(lái)完成,在業(yè)務(wù)處理比較復(fù)雜、耗時(shí)的時(shí)候,例如某些接口函數(shù)需要讀取數(shù)據(jù)庫(kù)執(zhí)行時(shí)間較長(zhǎng),此時(shí)該模式效率也不高,因?yàn)槎鄠€(gè)調(diào)用請(qǐng)求任務(wù)依然是順序一個(gè)接一個(gè)執(zhí)行。

3.????? THsHaServer模式(半同步半異步)

THsHaServer類(lèi)是TNonblockingServer類(lèi)的子類(lèi),在5.2節(jié)中的TNonblockingServer模式中,采用一個(gè)線程來(lái)完成對(duì)所有socket的監(jiān)聽(tīng)和業(yè)務(wù)處理,造成了效率的低下,THsHaServer模式的引入則是部分解決了這些問(wèn)題。THsHaServer模式中,引入一個(gè)線程池來(lái)專(zhuān)門(mén)進(jìn)行業(yè)務(wù)處理,如下圖5.3所示;


圖5.3 THsHaServer模式

THsHaServer的優(yōu)點(diǎn):

與TNonblockingServer模式相比,THsHaServer在完成數(shù)據(jù)讀取之后,將業(yè)務(wù)處理過(guò)程交由一個(gè)線程池來(lái)完成,主線程直接返回進(jìn)行下一次循環(huán)操作,效率大大提升;

THsHaServer的缺點(diǎn):

由圖5.3可以看出,主線程需要完成對(duì)所有socket的監(jiān)聽(tīng)以及數(shù)據(jù)讀寫(xiě)的工作,當(dāng)并發(fā)請(qǐng)求數(shù)較大時(shí),且發(fā)送數(shù)據(jù)量較多時(shí),監(jiān)聽(tīng)socket上新連接請(qǐng)求不能被及時(shí)接受。

4.????? TThreadPoolServer模式

TThreadPoolServer模式采用阻塞socket方式工作,,主線程負(fù)責(zé)阻塞式監(jiān)聽(tīng)“監(jiān)聽(tīng)socket”中是否有新socket到來(lái),業(yè)務(wù)處理交由一個(gè)線程池來(lái)處理,如下圖5.4所示:


圖5.4 線程池模式工作過(guò)程

TThreadPoolServer模式優(yōu)點(diǎn):

線程池模式中,數(shù)據(jù)讀取和業(yè)務(wù)處理都交由線程池完成,主線程只負(fù)責(zé)監(jiān)聽(tīng)新連接,因此在并發(fā)量較大時(shí)新連接也能夠被及時(shí)接受。線程池模式比較適合服務(wù)器端能預(yù)知最多有多少個(gè)客戶(hù)端并發(fā)的情況,這時(shí)每個(gè)請(qǐng)求都能被業(yè)務(wù)線程池及時(shí)處理,性能也非常高。

TThreadPoolServer模式缺點(diǎn):

線程池模式的處理能力受限于線程池的工作能力,當(dāng)并發(fā)請(qǐng)求數(shù)大于線程池中的線程數(shù)時(shí),新請(qǐng)求也只能排隊(duì)等待。

5.????? TThreadedSelectorServer

TThreadedSelectorServer模式是目前Thrift提供的最高級(jí)的模式,它內(nèi)部有如果幾個(gè)部分構(gòu)成:

(1)??一個(gè)AcceptThread線程對(duì)象,專(zhuān)門(mén)用于處理監(jiān)聽(tīng)socket上的新連接;

(2)??若干個(gè)SelectorThread對(duì)象專(zhuān)門(mén)用于處理業(yè)務(wù)socket的網(wǎng)絡(luò)I/O操作,所有網(wǎng)絡(luò)數(shù)據(jù)的讀寫(xiě)均是有這些線程來(lái)完成;

(3)??一個(gè)負(fù)載均衡器SelectorThreadLoadBalancer對(duì)象,主要用于AcceptThread線程接收到一個(gè)新socket連接請(qǐng)求時(shí),決定將這個(gè)新連接請(qǐng)求分配給哪個(gè)SelectorThread線程。

(4)??一個(gè)ExecutorService類(lèi)型的工作線程池,在SelectorThread線程中,監(jiān)聽(tīng)到有業(yè)務(wù)socket中有調(diào)用請(qǐng)求過(guò)來(lái),則將請(qǐng)求讀取之后,交個(gè)ExecutorService線程池中的線程完成此次調(diào)用的具體執(zhí)行;


圖5.5 TThreadedSelectorServer模式的工作過(guò)程

如上圖5.5所示,TThreadedSelectorServer模式中有一個(gè)專(zhuān)門(mén)的線程AcceptThread用于處理新連接請(qǐng)求,因此能夠及時(shí)響應(yīng)大量并發(fā)連接請(qǐng)求;另外它將網(wǎng)絡(luò)I/O操作分散到多個(gè)SelectorThread線程中來(lái)完成,因此能夠快速對(duì)網(wǎng)絡(luò)I/O進(jìn)行讀寫(xiě)操作,能夠很好地應(yīng)對(duì)網(wǎng)絡(luò)I/O較多的情況;TThreadedSelectorServer對(duì)于大部分應(yīng)用場(chǎng)景性能都不會(huì)差,因此,如果實(shí)在不知道選擇哪種工作模式,使用TThreadedSelectorServer就可以。



總結(jié)

以上是生活随笔為你收集整理的由浅入深了解Thrift(三)——Thrift server端的几种工作模式分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。