Dubbo線程模型2

轉(zhuǎn)自? https://ifeve.com/dubbo-threadmodel/

Dubbo剖析-線程模型

一、前言

Dubbo默認(rèn)的底層網(wǎng)絡(luò)通訊是使用Netty來做的,在服務(wù)提供方NettyServer使用兩級(jí)線程池,其中

EventLoopGroup(boss)主要用來接受客戶端的鏈接請(qǐng)求,并把接受的請(qǐng)求分發(fā)給EventLoopGroup(worker)來處

理,boss和worker線程組我們稱為IO線程。

如果服務(wù)提供方的邏輯能迅速完成,并且不會(huì)發(fā)起新的 IO 請(qǐng)求,則直接在 IO 線程上處理更快,因?yàn)檫@減少了線程池調(diào)度。

但如果處理邏輯較慢,或者需要發(fā)起新的 IO 請(qǐng)求,比如需要查詢數(shù)據(jù)庫(kù),則必須派發(fā)到新線程池,否則 IO 線程阻塞,將導(dǎo)致不能接收其它請(qǐng)求。


二、Dubbo提供的線程模型

all 所有消息都派發(fā)到線程池,包括請(qǐng)求,響應(yīng),連接事件,斷開事件,心跳等,模型如下圖

direct 所有消息都不派發(fā)到線程池,全部在 IO 線程上直接執(zhí)行,模型如下圖

execution 只請(qǐng)求消息派發(fā)到線程池,不含響應(yīng),響應(yīng)和其它連接斷開事件,心跳等消息,直接在 IO 線程上執(zhí)行,模型如下圖

connection 在 IO 線程上,將連接斷開事件放入隊(duì)列,有序逐個(gè)執(zhí)行,其它消息派發(fā)到線程池。

其中ThreadPool的spi實(shí)現(xiàn)有如下:

fixed 固定大小線程池,啟動(dòng)時(shí)建立線程,不關(guān)閉,一直持有。(缺省)

cached 緩存線程池,空閑一分鐘自動(dòng)刪除,需要時(shí)重建。

limited 可伸縮線程池,但池中的線程數(shù)只會(huì)增長(zhǎng)不會(huì)收縮。只增長(zhǎng)不收縮的目的是為了避免收縮時(shí)突然來了大流量引起的性能問題。

三、總結(jié)

dubbo提供了常用的線程模型和線程池?cái)U(kuò)展各有利弊,如果您有定制化需要,可以按照spi規(guī)范進(jìn)行定制。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 線程是每個(gè)應(yīng)用都必須關(guān)系的事情,畢竟任何服務(wù)器的資源都是有限的,服務(wù)線程過少的容易發(fā)生阻塞,服務(wù)線程過多的話上下文...
    此魚不得水閱讀 6,126評(píng)論 3 7
  • ??dubbo線程模型分為IO線程和服務(wù)調(diào)用處理線程,IO線程主要是netty的線程,可以在protocol標(biāo)簽中...
    mikewt閱讀 2,265評(píng)論 1 1
  • 最近在進(jìn)行下單壓測(cè)的時(shí)候發(fā)現(xiàn),當(dāng)調(diào)用下單服務(wù)的并發(fā)量比較高的時(shí)候,大部分都失敗了,只有200個(gè)下單可以成功(pro...
    我是一棵樹丶閱讀 9,708評(píng)論 0 14
  • 第一章 蘇家嫡女 “嗒,嗒,嗒…”門外傳來一陣腳步聲,隨即尖細(xì)的嗓音響起:“新后駕到~”緊閉的鐵門應(yīng)聲而開,刺眼...
    獨(dú)唱i閱讀 829評(píng)論 0 7
  • 高質(zhì)量的友誼總是發(fā)生在兩個(gè)優(yōu)秀的獨(dú)立人格之間,它的實(shí)質(zhì)是雙方互相由衷的欣賞和尊敬。因此,重要的是使自己真正有價(jià)值,...
    Sunny飛鏡閱讀 134評(píng)論 0 0

友情鏈接更多精彩內(nèi)容