Dubbo的執行緒模型
Dubbo的 protocol標籤提供了三個引數 dispatcher,threads(預設為100)
和 threadpool來為我們自定義DUBBO協議下的執行緒模型,其中dubbo自定義了5個執行緒dispatcher:
Dispatcher
all 所有訊息都派發到執行緒池,包括請求,響應,連線事件,斷開事件,心跳等。
direct 所有訊息都不派發到執行緒池,全部在Io執行緒上直接執行
message 只有請求響應訊息派發到執行緒池,其他連線斷開事件,心跳等訊息,直接在Io執行緒上執行。
execution 只請求訊息派發到執行緒池,不含響應和其他連線斷開事件,心跳等訊息,直接在Io執行緒上執行。
connection 在Io執行緒上,將連線斷開事件放入隊裡,有序 逐個執行,其他訊息派發到執行緒池。
以及四個常用的threadpool ::
fixed 固定大小執行緒池,啟動時建立執行緒,不關閉,一直持有。(預設)
cached 快取執行緒池,空閒一分鐘自動刪除,需要時重建。
limited 可伸縮執行緒池,但池中的執行緒數只會增長不會收縮。只增長不收縮的目的是為了避免收縮時突然來了大流量引起的效能問題。
eager 優先建立Worker執行緒池。在任務數量大於corePoolSize但是小於maximumPoolSize時,優先建立Worker來處理任務。當任務數量大於maximumPoolSize時,將任務放入阻塞佇列中。阻塞佇列充滿時丟擲RejectedExecutionException。(相比於cached:cached在任務數量超過maximumPoolSize時直接丟擲異常而不是將任務放入阻塞佇列)
DUBBO 官方文件給出的建議:
1:如果事件處理的邏輯能迅速完成,並且不會發起新的 IO 請求,比如只是在記憶體中記個標識,則直接在 IO 執行緒上處理更快,因為減少了執行緒池排程。:
2:但如果事件處理邏輯較慢,或者需要發起新的 IO 請求,比如需要查詢資料庫,則必須派發到執行緒池,否則 IO 執行緒阻塞,將導致不能接收其它請求。
3:如果用 IO 執行緒處理事件,又在事件處理過程中發起新的 IO 請求,比如在連線事件中發起登入請求,會報“可能引發死鎖”異常,但不會真死鎖
當然,Dispatcher 和 threadpool 都是可以擴充套件的,可以參考DUBBO文件的 訊息派發擴充套件和執行緒池擴充套件,此外,dispatcher與threadpool是有聯絡的
dispatcher在獲執行緒池時,如果沒有threadpool擴充套件則執行緒池預設為 Executors.newCachedThreadPool(new NamedThreadFactory("DubboSharedHandler", true));
如果有threadpool擴充套件則使用擴充的執行緒池。
配置如
<dubbo:protocol name="dubbo" dispatcher="all" threadpool="fixed" threads="100" />
相關文章
- Dubbo執行緒模型執行緒模型
- Dubbo RPC執行緒模型 原始碼分析RPC執行緒模型原始碼
- 執行緒模型執行緒模型
- Redis的執行緒模型Redis執行緒模型
- Dubbo學習筆記(三) RPC核心原理和執行緒模型筆記RPC執行緒模型
- WPF執行緒模型執行緒模型
- redis執行緒模型Redis執行緒模型
- 程式和執行緒模型執行緒模型
- 03.執行緒模型執行緒模型
- webrtc執行緒模型分析Web執行緒模型
- 淺談Netty的執行緒模型Netty執行緒模型
- Redis執行緒模型的前世今生Redis執行緒模型
- Node.js 的單執行緒事件驅動模型和內建的執行緒池模型Node.js執行緒事件模型
- 深入學習redis 的執行緒模型Redis執行緒模型
- 多執行緒之共享模型執行緒模型
- 執行緒池執行模型原始碼全解析執行緒模型原始碼
- Netty原始碼解析一——執行緒池模型之執行緒池NioEventLoopGroupNetty原始碼執行緒模型OOP
- 沒想到吧!關於Dubbo的『消費端執行緒池模型』官網也寫錯了。執行緒模型
- Redis執行緒模型的原理分析蒼癘Redis執行緒模型
- Java 執行緒記憶體模型Java執行緒記憶體模型
- (三)Redis 執行緒與IO模型Redis執行緒模型
- Redis之單執行緒 Reactor 模型Redis執行緒React模型
- 鴻蒙HarmonyOS實戰-Stage模型(執行緒模型)鴻蒙模型執行緒
- Arthas | 定位線上 Dubbo 執行緒池滿異常執行緒
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- 常用高併發網路執行緒模型設計及mongodb執行緒模型優化實踐執行緒模型MongoDB優化
- 【雜談】JS相關的執行緒模型整理JS執行緒模型
- 理解微信小程式的雙執行緒模型微信小程式執行緒模型
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- Java多執行緒記憶體模型Java執行緒記憶體模型
- Redis篇:單執行緒I/O模型Redis執行緒模型
- IO流中「執行緒」模型總結執行緒模型
- redis執行緒模型-學習小結Redis執行緒模型
- 伺服器模型——從單執行緒阻塞到多執行緒非阻塞(下)伺服器模型執行緒
- 伺服器模型——從單執行緒阻塞到多執行緒非阻塞(中)伺服器模型執行緒
- java多執行緒:執行緒間通訊——生產者消費者模型Java執行緒模型
- 虛擬執行緒相對於Actor模型或平臺執行緒的主要優勢? - Reddit執行緒模型
- Tomcat執行緒模型 BIO模型原始碼與調優Tomcat執行緒模型原始碼