1. 程式人生 > 其它 >執行緒池大小設定策略

執行緒池大小設定策略

決策變數

  • 有多少個CPU
  • 有多大記憶體
  • CPU 密集型,還是 I/O 密集型
  • 檔案控制代碼數
  • 套接字控制代碼數
  • 任務是否需要像 JDBC 連線這樣的稀缺資源

執行緒池大小過大、過小存在的問題

如果過大,大量的執行緒競爭相對很少的 CPU 和記憶體資源,導致更高的記憶體使用量,而且還可能耗盡資源。

如果過小,存在空閒的處理器無任務可執行,降低了吞吐量。

計算方法

依據稀缺資源的資源池大小

執行緒池大小上限 = 資源總可用數量 / 每個任務對資源的需求量

依據計算、等待時長

執行緒池大小上限 = CPU核心數 * CPU期望利用率 * (任務執行總時長 / 任務CPU計算時長)

如何估算計算、等待時長

  • 通過一些分析或臨近工具來獲得
  • 在某個基準負載下,分別設定不同大小的執行緒池來執行應用程式,並觀察CPU利用率

其它事項

  • 不同型別的任務,應使用多個執行緒池
  • 執行緒池大小可能反過來限制連線池大小,如執行緒池中任務是資料庫連線池的唯一使用者時,小的執行緒池不需要大的連線池

參考書籍:《Java併發程式設計實戰》