-
數據庫連接池的個數
-
tomcat的請求連接數
-
線程池的線程數
-
waiting狀態的線程會不會進行CPU切換??(寫代碼驗證)
在許多場景下,讓計算機同時去做幾件事情,不僅是因為計算機的運算能力強大了,還有一個很重要的原因是計算機的運算速度與它的存儲和通信子系統的速度差距太大,大量的時間都花費在磁盤I/O、網絡通信或者數據庫訪問上。如果不希望處理器在大部分時間里都處於等待其他資源的空閑狀態,就必須使用一些手段去把處理器的運算能力“壓榨”出來,否則就會造成很大的性能浪費,而讓計算機同時處理幾項任務則是最容易想到,也被證明是非常有效的“壓榨”手段。
java設置線程池大小,這里提供三個考量點:
1,一般情況程序線程數等於cpu線程數的兩到三倍就能很好的利用cpu了
2,一個公式:線程池設定最佳線程數目 = ((線程池設定的線程等待時間+線程CPU時間)/線程CPU時間 )* CPU數目
這個公式的線程cpu時間是預估的程序單個線程在cpu上運行的時間(通常使用loadrunner測試大量運行次數求出平均值)
3,上面兩個方案都是參考而已,給出個大概范圍,最后最佳的線程池設定大小還是要根據實際情況,多次實驗。
線程池中線程數量並不是越多越好,具體的數量需要評估每個任務的處理時間,以及當前計算機的處理器能力和數量。使用的線程過少,無法發揮處理器的性能;使用的線程過多,將會增加系統的無故開銷,起到相反的作用。