01 最佳線程數(shù)計(jì)算
1.1 cpu密集型
n+1
當(dāng)因?yàn)轫撊笔Щ蚱渌收隙鴮?dǎo)致某一線程暫停時(shí),額外的線程可以保證cpu的時(shí)鐘周期不被浪費(fèi)
1.2 Io密集型
2*n 這個(gè)是不準(zhǔn)的,因?yàn)檎I(yè)務(wù)都是IO密集型的。
真正使用時(shí)應(yīng)以下方為準(zhǔn)
1.3 同步最佳線程數(shù)目
(線程等待時(shí)間/線程消耗CPU時(shí)間 + 1)* cpu核數(shù)cpu利用率
線程數(shù)=cpu核數(shù)cpu使用率*(1+wait time/cpu time)
W/C: 等待時(shí)間與計(jì)算時(shí)間的比值
1.4 單線程QPS
1000/(cpu time + wait time)
1.5 異步最佳線程數(shù)
wait time主要是阻塞于IO上的時(shí)間,改成異步后wait tme趨于0了,
線程數(shù)~=cpu核數(shù) * cpu利用率
此時(shí)退化成cpu密集型了
02 QPS計(jì)算
2.1 rpc同步調(diào)用
最佳線程數(shù) * 單線程的QPS
(1000/cpu time)*cpu核數(shù) * cpu利用率
2.2 rpc異步調(diào)用
異步最佳線程數(shù) * 單線程QPS
因?yàn)閣ait time已經(jīng)趨于0了,所以此處的單線程QPS要遠(yuǎn)大于同步時(shí)的QPS;
03 總結(jié)
客戶端RT=服務(wù)端RT+網(wǎng)絡(luò)開鎖
服務(wù)端RT=thread cup time(cpu消耗時(shí)間 CT) + thread wait time(cpu等待時(shí)間 WT)
單線程QPS:1000/RT
最佳線程數(shù)=(RT/CPU TIME)CPU核數(shù)cpu使用率
QPS=最佳線程數(shù)單線程的QPS
=((CT+WT)/CT)CPU核數(shù)cpu使用率 * 1000/(WT+CT)
=(1000/CT)cpu核數(shù)*cpu利用率 (沒有考慮線程的上下文切換)
cpu time 是所有環(huán)境上消耗的cpu時(shí)間之和,取決于數(shù)據(jù)結(jié)構(gòu)和算法;
cpu的利用率受 io 連接池 內(nèi)存 編程模型等影響;
amdahl定律:當(dāng)增加計(jì)算資源的時(shí)候(如cpu 內(nèi)存 寬帶),吞吐量能夠進(jìn)行相應(yīng)的改進(jìn),其加速比:
speedup <= 1/(F+(1-F)/N)
F表示必須串行執(zhí)行的比重
N 處理器個(gè)數(shù)
如CPU核數(shù)從1到4,只要F>0,最大加速比就不會(huì)翻4倍;
gustafson定律,對(duì)amdahl的補(bǔ)充:S= N-a(N-1)
N是處理器個(gè)數(shù),a是串行時(shí)間占總執(zhí)行時(shí)間的比例;