每日一題78:程序開(kāi)多少線程合適?

勵(lì)志當(dāng)最強(qiáng)課代表的我來(lái)給大家總結(jié)總結(jié)??????
程序開(kāi)多少線程合適?
視頻內(nèi)容:
1??CPU 密集型程序??
2??I/O密集型程序??
視頻內(nèi)容:
1??CPU 密集型程序??
CPU 密集型程序,一個(gè)完整請(qǐng)求,I/O操作可以在很短時(shí)間內(nèi)完成,CPU還有很多運(yùn)算要處理,也就是說(shuō)CPU計(jì)算的比例占很大一部分,線程等待時(shí)間接近0
1.單核CPU:一個(gè)完整請(qǐng)求,I/O操作可以在很短時(shí)間內(nèi)完成,CPU還有很多運(yùn)算要處理,也就是說(shuō)CPU計(jì)算的比例占很大一部分,線程等待時(shí)間接近0。單核CPU處理CPU密集型程序,這種情況并不太適合使用多線程。
⒉.多核︰如果是多核CPU處理CPU密集型程序,我們完全可以最大化的利用CPU核心數(shù),應(yīng)用并發(fā)編程來(lái)提高效率。CPU密集型程序的最佳線程數(shù)就是:理論上線程數(shù)量=CPU核數(shù)(邏輯),但是實(shí)際上,數(shù)量一般會(huì)設(shè)置為CPU核數(shù)(邏輯)+1(經(jīng)驗(yàn)值),計(jì)算(CPU)密集型的線程恰好在某時(shí)因?yàn)榘l(fā)生一個(gè)頁(yè)錯(cuò)誤或者因其他原因而暫停,剛好有一個(gè)“額外""的線程,可以確保在這種情況下CPU周期不會(huì)中斷工作

2??I/O密集型程序??
I/O密集型程序,與CPU密集型程序相對(duì),一個(gè)完整請(qǐng)求,CPU運(yùn)算操作完成之后還有很多V/O操作要做,也就是說(shuō)Ⅱ/O操作占比很大部分,等待時(shí)間較長(zhǎng),線程等待時(shí)間所占比例越高,需要越多線程;線程CPU時(shí)間所占比例越高,需要越少線程
1.I/O密集型程序的最佳線程數(shù)就是:最佳線程數(shù)=CPU核心數(shù)(1/CPU利用率=CPU核心數(shù)(1+(I/O耗時(shí)/CPU耗時(shí)))
⒉.如果幾乎全是I/O耗時(shí),那么CPU耗時(shí)就無(wú)限趨近于0,所以純理論你就可以說(shuō)是2N(N=CPU核數(shù)),當(dāng)然也有說(shuō)2N + 1的,1應(yīng)該是backup
3.—般說(shuō)2N +1就即可
