1. 程式人生 > 其它 >Tomcat執行緒池原理

Tomcat執行緒池原理

Tomcat 兩大元件

聯結器Connector   負責對外溝通  使用到了執行緒池

  容器Container   負責實現Servlet規範

聯結器 期中一部分元件NIO EndPoint的組成

  • LimitLatch 用來限流,可以控制最大連線個數,類似 J.U.C 中的 Semaphore 後面再講
  • Acceptor 只負責【接收新的 socket 連線】
  • Poller 只負責監聽 socket channel是否有【可讀的 I/O 事件】
  • 一旦可讀,封裝一個任務物件(socketProcessor),提交給 Executor 執行緒池處理
  • Executor 執行緒池中的工作執行緒最終負責【處理請求】 

 

Tomcat 執行緒池擴充套件了 ThreadPoolExecutor,行為稍有不同

  • 如果匯流排程數達到 maximumPoolSize
  • 這時不會立刻拋 RejectedExecutionException 異常
  • 而是再次嘗試將任務放入佇列,如果還失敗,才丟擲 RejectedExecutionException 異常 

 

 

發生異常後  抓住異常   嘗試使用force 方法 加入阻塞佇列  還是失敗  丟擲異常     一定時間內重試 而且幾乎只有一次機會

 

 

Tomcat執行緒池配置

Connector 配置 

 

 

Executor 執行緒配置 

 

 預設是守護新城

問題:無界阻塞佇列是否意味著永遠無法觸發救急執行緒?

Tomcat對 佇列的做了封裝 taskQueue  修改了實現

 

 

這個圖好像有點問題      總之是 核心執行緒不夠用了 先考慮建立救急執行緒  再考慮加入佇列