一、聊聊執行緒池的引數配置規則
1、cpu密集型、io密集型、混合型任務
2、任務執行時間
3、任務是否有依賴----比如其他系統資源(資料庫,第三方介面等)
這裡講解,根據cpu密集型、io密集型、任務執行時間來決定如何配置:核心執行緒數、最大執行緒數、等待佇列數
1、cpu密集型:一般使用較小的執行緒池---》 cpu核心數+1
2、io密集型:2*cup核心數+1
3、任務執行時間(系統任務吞吐量、任務執行完成需要時間等考慮)
那麼就需要以下幾個引數來決定核心執行緒數、最大執行緒數、等待佇列數的具體參考範圍
tasksecond=20~100 //每秒系統接收的任務數量:參考我的業務系統大概是20~100個
responsetime=1 //系統允許容忍最大響應時間,這裡1秒,其實我的業務系統是非同步處理,所以基本是毫秒級別響應,但是為了保守起見,為1秒吧
那麼我們開始根據這幾個伺服器的參考引數來計算一下核心執行緒數、最大執行緒數、等待佇列數的取值範圍
1、corepoolsize=tasksecond / ( 1 / taskcost )=(20~100)/(1/5~10)=(20~100)* (5~10)=(100~500)~(200~1000) 。也就是corepoolsize說明:
5秒內可能產生的任務是:100~500
10秒內可能產生的任務數量數:200~1000
2、但是根據8020原則,如果80%的每秒任務小於800,那麼corepoolsize設定為80即可。
按照上面8020原則:(5秒~10秒)*80=400~800個任務。那麼針對上面計算出來的:
5秒內任務數量,8020原則比對在範圍內:100<400<500
10秒內任務最量,8020原則比對在範圍內:200<800<1000
所以我自己設定:corepoolsize=80
代入資料maxpoolsize=(80/5~10)*1=16~8,也就是說,queuepoolsize的取值範圍是8~16,意思是等待佇列裡面的執行緒,可以等待8~16秒,超過了這個時間就需要開新的執行緒來執行。
最大執行緒數=( 最大任務數-等待佇列容量)/ 每個執行緒每秒處理能力
執行緒核心引數? 如何合理配置執行緒池引數?
預設配置 corepoolsize 1 queuecapacity integer.max value maxpoolsize integer.max value keepalivetime 60秒 allowcorethreadtimeout false rejectedexecutionhand...
執行緒池引數
由於系統頻繁的建立和銷毀執行緒,因而使用執行緒池讓建立的執行緒進行復用 1.corepoolsize 指定了執行緒池中的執行緒數量 2.maximumpoolsize 執行緒池中最大執行緒數量 3.keepalivetime 當執行緒池中的執行緒數超過corepoolsize,多餘的空閒的執行緒的存...
執行緒池引數
我把執行緒池引數給做個形象的比喻,執行緒池 就好比乙個水池,池底有n個小洞,就是核心執行緒數量n,最大執行緒數量就是這個池子能裝多少個桌球,等待佇列 就是池子之外的一塊地方,有的佇列是有界的,就是大小固定,有的是無界的,大小不固定。任務 就是把桌球丟到池子中,讓桌球從池底的小洞掉下去。相當於執行緒的...