<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          問一下,線程池里面到底該設(shè)置多少個(gè)線程?

          共 1918字,需瀏覽 4分鐘

           ·

          2020-08-12 03:28


          點(diǎn)擊上方“碼農(nóng)突圍”,馬上關(guān)注

          這里是碼農(nóng)充電第一站,回復(fù)“666”,獲取一份專屬大禮包

          真愛,請?jiān)O(shè)置“星標(biāo)”或點(diǎn)個(gè)“在看”

          作者 |?只會一點(diǎn)java

          來源 |?cnblogs.com/dennyzhangdd/p/6909771.html

          一、拋出問題

          關(guān)于如何計(jì)算并發(fā)線程數(shù),一般分兩派,來自兩本書,且都是好書,到底哪個(gè)是對的?問題追蹤后,整理如下:

          第一派:《Java Concurrency in Practice》即《java并發(fā)編程實(shí)踐》,如下圖:

          如上圖,在《Java Concurrency in Practice》一書中,給出了估算線程池大小的公式:

          Nthreads=NcpuUcpu(1+w/c),其中

          Ncpu=CPU核心數(shù)

          Ucpu=cpu使用率,0~1

          W/C=等待時(shí)間與計(jì)算時(shí)間的比率

          第二派:《Programming Concurrency on the JVM Mastering》即《Java 虛擬機(jī)并發(fā)編程》

          線程數(shù)=Ncpu/(1-阻塞系數(shù))

          二、分析

          對于派系一,假設(shè)cpu100%運(yùn)轉(zhuǎn),即撇開CPU使用率這個(gè)因素,線程數(shù)=Ncpu*(1+w/c)。

          現(xiàn)在假設(shè)將派系二的公式等于派系一公式,即Ncpu/(1-阻塞系數(shù))=Ncpu*(1+w/c),===》阻塞系數(shù)=w/(w+c),即阻塞系數(shù)=阻塞時(shí)間/(阻塞時(shí)間+計(jì)算時(shí)間),這個(gè)結(jié)論在派系二后續(xù)中得到應(yīng)征,如下圖:

          由此可見,派系一和派系二其實(shí)是一個(gè)公式……這樣我就放心了……

          三、實(shí)際應(yīng)用

          那么實(shí)際使用中并發(fā)線程數(shù)如何設(shè)置呢?分析如下(我們以派系一公式為例):

          Nthreads=Ncpu*(1+w/c)

          IO密集型:一般情況下,如果存在IO,那么肯定w/c>1(阻塞耗時(shí)一般都是計(jì)算耗時(shí)的很多倍),但是需要考慮系統(tǒng)內(nèi)存有限(每開啟一個(gè)線程都需要內(nèi)存空間),這里需要上服務(wù)器測試具體多少個(gè)線程數(shù)適合(CPU占比、線程數(shù)、總耗時(shí)、內(nèi)存消耗)。如果不想去測試,保守點(diǎn)取1即,Nthreads=Ncpu*(1+1)=2Ncpu。這樣設(shè)置一般都OK。擴(kuò)展一下:JAVA多線程和并發(fā)基礎(chǔ)面試問答

          計(jì)算密集型:假設(shè)沒有等待w=0,則W/C=0. Nthreads=Ncpu。

          至此結(jié)論就是:

          IO密集型=2Ncpu(可以測試后自己控制大小,2Ncpu一般沒問題)(常出現(xiàn)于線程中:數(shù)據(jù)庫數(shù)據(jù)交互、文件上傳下載、網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)鹊龋?/p>

          計(jì)算密集型=Ncpu(常出現(xiàn)于線程中:復(fù)雜算法)

          java中:Ncpu=Runtime.getRuntime().availableProcessors()

          當(dāng)然派系一種《Java Concurrency in Practice》還有一種說法,

          即對于計(jì)算密集型的任務(wù),在擁有N個(gè)處理器的系統(tǒng)上,當(dāng)線程池的大小為N+1時(shí),通常能實(shí)現(xiàn)最優(yōu)的效率。(即使當(dāng)計(jì)算密集型的線程偶爾由于缺失故障或者其他原因而暫停時(shí),這個(gè)額外的線程也能確保CPU的時(shí)鐘周期不會被浪費(fèi)。)

          即,計(jì)算密集型=Ncpu+1,但是這種做法導(dǎo)致的多一個(gè)cpu上下文切換是否值得,這里不考慮。讀者可自己考量

          四、總結(jié):

          選擇線程池并發(fā)線程數(shù)的因素很多:任務(wù)類型、內(nèi)存等線程中使用到所有資源都需要考慮。

          END


          ---END---
          重磅!碼農(nóng)突圍-技術(shù)交流群已成立

          掃碼可添加碼農(nóng)突圍助手,可申請加入碼農(nóng)突圍大群和細(xì)分方向群,細(xì)分方向已涵蓋:Java、Python、機(jī)器學(xué)習(xí)、大數(shù)據(jù)、人工智能等群。
          一定要備注:開發(fā)方向+地點(diǎn)+學(xué)校/公司+昵稱(如Java開發(fā)+上海+拼夕夕+猴子),根據(jù)格式備注,可更快被通過且邀請進(jìn)群

          ▲長按加群

          推薦閱讀

          ? ?Google 再見 Java
          ???面試官:我把數(shù)據(jù)庫部署在Docker容器內(nèi),你覺得如何?
          ???華為阿里下班時(shí)間曝光:所有的光鮮,都有加班的味道
          ???永遠(yuǎn)不要在代碼中使用「User」這個(gè)單詞!
          ?? 面試:如何決定使用 HashMap 還是 TreeMap?
          ?? 微軟蘇州集體抵制來自阿里、華為的跳槽者:請停止你的“奮斗逼”行為!網(wǎng)友:看到 955 不加班的公司名單,我酸了
          最近面試BAT,整理一份面試資料Java面試BAT通關(guān)手冊,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。
          獲取方式:點(diǎn)“在看”,關(guān)注公眾號并回復(fù)?BAT?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
          如有收獲,點(diǎn)個(gè)在看,誠摯感謝明天見(??ω??)??

          瀏覽 45
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲无码专区精品 | 91工厂露脸熟女 | 色情一级AA片免费观看 | 国产逼爱| 国产精品一区二区三区四区 |