乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      如何合理設(shè)置線程池大小

       黃家v少 2019-03-26

      接著上一篇探討線程池留下的尾巴,如何合理的設(shè)置線程池大小。
      要想合理的配置線程池的大小,首先得分析任務(wù)的特性,可以從以下幾個角度分析:

      1. 任務(wù)的性質(zhì):CPU密集型任務(wù)、IO密集型任務(wù)、混合型任務(wù)。
      2. 任務(wù)的優(yōu)先級:高、中、低。
      3. 任務(wù)的執(zhí)行時間:長、中、短。
      4. 任務(wù)的依賴性:是否依賴其他系統(tǒng)資源,如數(shù)據(jù)庫連接等。

      性質(zhì)不同的任務(wù)可以交給不同規(guī)模的線程池執(zhí)行。

      對于不同性質(zhì)的任務(wù)來說,CPU密集型任務(wù)應(yīng)配置盡可能小的線程,如配置CPU個數(shù)+1的線程數(shù),IO密集型任務(wù)應(yīng)配置盡可能多的線程,因為IO操作不占用CPU,不要讓CPU閑下來,應(yīng)加大線程數(shù)量,如配置兩倍CPU個數(shù)+1,而對于混合型的任務(wù),如果可以拆分,拆分成IO密集型和CPU密集型分別處理,前提是兩者運行的時間是差不多的,如果處理時間相差很大,則沒必要拆分了。

      若任務(wù)對其他系統(tǒng)資源有依賴,如某個任務(wù)依賴數(shù)據(jù)庫的連接返回的結(jié)果,這時候等待的時間越長,則CPU空閑的時間越長,那么線程數(shù)量應(yīng)設(shè)置得越大,才能更好的利用CPU。
      當(dāng)然具體合理線程池值大小,需要結(jié)合系統(tǒng)實際情況,在大量的嘗試下比較才能得出,以上只是前人總結(jié)的規(guī)律。

      在這篇如何合理地估算線程池大?。?/a>文章中發(fā)現(xiàn)了一個估算合理值的公式

      最佳線程數(shù)目 = ((線程等待時間+線程CPU時間)/線程CPU時間 )* CPU數(shù)目
      

      比如平均每個線程CPU運行時間為0.5s,而線程等待時間(非CPU運行時間,比如IO)為1.5s,CPU核心數(shù)為8,那么根據(jù)上面這個公式估算得到:((0.5+1.5)/0.5)*8=32。這個公式進一步轉(zhuǎn)化為:

      最佳線程數(shù)目 = (線程等待時間與線程CPU時間之比 + 1)* CPU數(shù)目
      

      可以得出一個結(jié)論:
      線程等待時間所占比例越高,需要越多線程。線程CPU時間所占比例越高,需要越少線程。
      以上公式與之前的CPU和IO密集型任務(wù)設(shè)置線程數(shù)基本吻合。

      并發(fā)編程網(wǎng)上的一個問題
      高并發(fā)、任務(wù)執(zhí)行時間短的業(yè)務(wù)怎樣使用線程池?并發(fā)不高、任務(wù)執(zhí)行時間長的業(yè)務(wù)怎樣使用線程池?并發(fā)高、業(yè)務(wù)執(zhí)行時間長的業(yè)務(wù)怎樣使用線程池?
      (1)高并發(fā)、任務(wù)執(zhí)行時間短的業(yè)務(wù),線程池線程數(shù)可以設(shè)置為CPU核數(shù)+1,減少線程上下文的切換
      (2)并發(fā)不高、任務(wù)執(zhí)行時間長的業(yè)務(wù)要區(qū)分開看:
        a)假如是業(yè)務(wù)時間長集中在IO操作上,也就是IO密集型的任務(wù),因為IO操作并不占用CPU,所以不要讓所有的CPU閑下來,可以適當(dāng)加大線程池中的線程數(shù)目,讓CPU處理更多的業(yè)務(wù)
        b)假如是業(yè)務(wù)時間長集中在計算操作上,也就是計算密集型任務(wù),這個就沒辦法了,和(1)一樣吧,線程池中的線程數(shù)設(shè)置得少一些,減少線程上下文的切換
      (3)并發(fā)高、業(yè)務(wù)執(zhí)行時間長,解決這種類型任務(wù)的關(guān)鍵不在于線程池而在于整體架構(gòu)的設(shè)計,看看這些業(yè)務(wù)里面某些數(shù)據(jù)是否能做緩存是第一步,增加服務(wù)器是第二步,至于線程池的設(shè)置,設(shè)置參考(2)。最后,業(yè)務(wù)執(zhí)行時間長的問題,也可能需要分析一下,看看能不能使用中間件對任務(wù)進行拆分和解耦。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多