關(guān)于生產(chǎn)環(huán)境如何配置線程數(shù),還是要根據(jù)業(yè)務(wù)來進(jìn)行區(qū)分,我們時(shí)常會(huì)聽到什么IO密集型、CPU密集型任務(wù)...
大家知道什么樣的任務(wù)或者代碼會(huì)被認(rèn)定為IO/CPU密集?
又是用什么樣的標(biāo)準(zhǔn)來認(rèn)定IO/CPU密集?
如果你沒有明確的答案,那么就隨著這篇文章一起來聊一聊吧。
開篇之前我們先來了解下什么是CPU密集型和IO密集型
CPU密集型(CPU-bound)
CPU密集型也叫計(jì)算密集型,顧名思義就是應(yīng)用需要非常多的CPU計(jì)算資源,系統(tǒng)運(yùn)作大部分的狀況是CPU Loading 100%,CPU要讀/寫I/O(硬盤/內(nèi)存),I/O在很短的時(shí)間就可以完成,而CPU還有許多運(yùn)算要處理,CPU Loading很高。
在多核CPU時(shí)代,我們要讓每一個(gè)CPU核心都參與計(jì)算,將CPU的性能充分利用起來,這樣才算是沒有浪費(fèi)服務(wù)器配置,如果在非常好的服務(wù)器配置上還運(yùn)行著單線程程序那將是多么重大的浪費(fèi)。
代碼體現(xiàn):
int n = 0.0
for (i in 0..9999999) {
n = Math.cos(i.toDouble()
)
平常開發(fā)應(yīng)用場(chǎng)景:CPU密集型任務(wù)一般來說:計(jì)算型代碼、Bitmap轉(zhuǎn)換、Gson轉(zhuǎn)換等
IO密集型(I/O bound)
對(duì)于IO密集型的應(yīng)用,就很好理解了,我們現(xiàn)在做的開發(fā)大部分都是WEB應(yīng)用,涉及到大量的網(wǎng)絡(luò)傳輸。不僅如此,與數(shù)據(jù)庫,與緩存間的交互也涉及到IO,一旦發(fā)生IO,線程就會(huì)處于等待狀態(tài),當(dāng)IO結(jié)束,數(shù)據(jù)準(zhǔn)備好后,線程才會(huì)繼續(xù)執(zhí)行。因此從這里可以發(fā)現(xiàn),對(duì)于IO密集型的應(yīng)用,我們可以多設(shè)置一些線程池中線程的數(shù)量,這樣就能讓在等待的這段時(shí)間內(nèi),線程可以去做其它事,提高并發(fā)處理效率。
代碼體現(xiàn):
BufferedReader br =new BufferedReader(new FileReader("xxxx"), 1024);
try {
while (br.readLine() != null) {}
} finally {
if (br != null) {
br.close()
}
平常開發(fā)應(yīng)用場(chǎng)景:文件讀寫、DB讀寫、網(wǎng)絡(luò)請(qǐng)求等
日常開發(fā)中如何優(yōu)化:
計(jì)算密集型任務(wù)的特點(diǎn)是要進(jìn)行大量的計(jì)算,消耗CPU資源,比如計(jì)算圓周率、對(duì)視頻進(jìn)行高清解碼等等,全靠CPU的運(yùn)算能力。這種計(jì)算密集型任務(wù)雖然也可以用多任務(wù)完成,但是任務(wù)越多,花在任務(wù)切換的時(shí)間就越多,CPU執(zhí)行任務(wù)的效率就越低。所以,要最高效地利用CPU,計(jì)算密集型任務(wù)同時(shí)進(jìn)行的數(shù)量應(yīng)當(dāng)?shù)扔贑PU的核心數(shù)
線程數(shù) = CPU核數(shù)+1
也可以設(shè)置成CPU核數(shù)*2,這還是要看JDK的使用版本,以及CPU配置(服務(wù)器的CPU有超線程)。對(duì)于JDK1.8來說,里面增加了一個(gè)并行計(jì)算,計(jì)算密集型的較理想線程數(shù) = CPU內(nèi)核線程數(shù)*2
IO密集型,涉及到網(wǎng)絡(luò)、磁盤IO的任務(wù)都是IO密集型任務(wù),這類任務(wù)的特點(diǎn)是CPU消耗很少,任務(wù)的大部分時(shí)間都在等待IO操作完成(因?yàn)镮O的速度遠(yuǎn)遠(yuǎn)低于CPU和內(nèi)存的速度)。對(duì)于IO密集型任務(wù),任務(wù)越多,CPU效率越高,但也有一個(gè)限度。常見的大部分任務(wù)都是IO密集型任務(wù),比如Web應(yīng)用
線程數(shù) = CPU核心數(shù)/(1-阻塞系數(shù))
這個(gè)阻塞系數(shù)一般為0.8~0.9之間,也可以取0.8或者0.9。套用公式,對(duì)于雙核CPU來說,它比較理想的線程數(shù)就是20,當(dāng)然這都不是絕對(duì)的,需要根據(jù)實(shí)際情況以及實(shí)際業(yè)務(wù)來調(diào)整。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
新聞標(biāo)題:4.線程數(shù)設(shè)置-創(chuàng)新互聯(lián)
分享地址:http://chinadenli.net/article40/deheeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、面包屑導(dǎo)航、定制開發(fā)、網(wǎng)站導(dǎo)航、網(wǎng)站內(nèi)鏈、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容