Dubbo之線程模型(Dispatcher屬性、ThreadPool屬性)。

事件處理線程說明

  • 若是事件處理的邏輯能迅速完成,而且不會發起新的IO請求,好比只是在內存中記個標識。則直接在IO線程上處理更快,由於減小了線程池調度。
  • 但若是事件處理邏輯較慢,或者須要發起新的IO請求,好比須要查詢數據庫,則必須派發到線程池,不然IO線程阻塞,將致使不能接收其餘請求。
  • 若是用IO線程處理事件,又在事件處理過程當中發起新的IO請求,好比在鏈接事件中發起登陸請求,會報「可能引起死鎖」異常,但不會真死鎖。

Dispatcher

  • all

全部消息都派發到線程池,包括請求、響應、鏈接事件、斷開事件、心跳等。數據庫

  • direct

全部消息都不派發到線程池,所有在IO線程上直接執行。緩存

  • message

只有請求響應消息派發到線程池,其餘鏈接斷開事件、心跳等消息,直接在IO線程上執行。性能

  • execution

只請求消息派發到線程池,不含響應,響應和其餘鏈接斷開事件、心跳等消息,直接在IO線程上執行。spa

  • connection

在IO線程上,將鏈接斷開事件放入隊列,有序逐個執行,其餘消息派發到線程池。線程

ThreadPool

  • fixed

固定大小線程池,啓動時創建線程,不關閉,一直持有。(缺省)blog

  • cached

緩存線程池,空閒一分鐘自動刪除,須要時重建。隊列

  • limited

可伸縮線程池,但池中的線程只會增加不會收縮。(爲避免收縮時忽然來了大流量引發的性能問題)事件

配置如

  • <dubbo:protocol name="dubbo" dispatcher="all" threadpool="fixed" threads="100" />
相關文章
相關標籤/搜索