結論:n核伺服器,通過執行業務的單執行緒分析出本地計算(消耗cpu)時間為x,等待時間為y,則工作執行緒數(執行緒池執行緒數)設定為 n*(x+y)/x,能讓cpu的利用率最大化。
x:y = 1:2
分析過程:
上圖是乙個典型的工作執行緒的處理過程,從開始處理start到結束處理end,該任務的處理共有7個步驟:
1)從工作佇列裡拿出任務,進行一些本地初始化計算,例如http協議分析、引數解析、引數校驗等
2)訪問cache拿一些資料
3)拿到cache裡的資料後,再進行一些本地計算,這些計算和業務邏輯相關
4)通過rpc呼叫下游service再拿一些資料,或者讓下游service去處理一些相關的任務
5)rpc呼叫結束後,再進行一些本地計算,怎麼計算和業務邏輯相關
6)訪問db進行一些資料操作
7)操作完資料庫之後做一些收尾工作,同樣這些收尾工作也是本地計算,和業務邏輯相關
分析:1)其中1,3,5,7步驟中【上圖中粉色時間軸】,執行緒進行本地業務邏輯計算時需要占用cpu
2)而2,4,6步驟中【上圖中橙色時間軸】,訪問cache、service、db過程中線程處於乙個等待結果的狀態,不需要占用cpu,進一步的分解,這個「等待結果」的時間共分為三部分:
2.1)請求在網路上傳輸到下游的cache、service、db
2.2)下游cache、service、db進行任務處理
2.3)cache、service、db將報文在網路上傳回工作執行緒
n核伺服器,通過執行業務的單執行緒分析出本地計算(消耗cpu)時間為x,等待時間為y,則工作執行緒數(執行緒池執行緒數)設定為 n*(x+y)/x,能讓cpu的利用率最大化。
求素數個數
我最近在leetcode上擼了乙個小演算法,雖然已經工作了五年,當看到每次 提交後排名的提公升,內心依然很有成就感。題目比較簡單,求小於n的素數個數,素數也叫質數,具有以下特點 根據上面的特點,我們還可以推斷出 依據這一點,我們可以寫出下面的實現 class solution intcount 1 ...
求個數 素數因子
public class primefactor public static void main string args for int i 2 i 100 i system.out.print i 的素數因子有 for int j 2 j2的素數因子有 3的素數因子有 4的素數因子有 2,5的素數...
求0的個數
例題描述 求0的個數 求1 2 3 4 n所得數末尾有多少個0?樣例輸入 5 樣例輸出 1方法一 採用從1乘到n,每乘一次進行一次判斷,若後面有零則去掉後面的0,並記下掉的0的個數,並且為了不超過數的表示範圍,去掉前面與0有關的數,只保留三位有效數字。include using namespace ...