回覆列表
  • 1 # 架構師成長錄

    執行緒池的大小對系統的效能有一定的影響,過大或者過小的執行緒數量都無法發揮最優的系統性能,但是執行緒池大小的確定也不需要做的非常精確。因為只要避免極大和極小兩種情況,執行緒池的大小對效能的影響都不會影響太大,一般來說,確定執行緒池的大小需要考慮CPU數量,記憶體大小等因素,在《Java Concurrency in Practice》 書中給出了一個估算執行緒池大小的經驗公式:

    公式:Nthread = Ncpu * Ucpu * (1+ W/C),各欄位含義:

    Nthreads:執行緒數量

    Ncpu:CPU的數量,Runtime.getRuntime().availableProcessors()

    Ucpu:CPU使用率,範圍在[0,1]

    W/C:等待時間與計算時間的比率

    其實就是要分清是計算密集型還是IO密集型。

    如果是C無限大也就是計算密集型的那麼執行緒太多意義不大,因為需要CPU計算,起多了也沒用。

    如果是IO密集型那麼可以起更多的執行緒,因為等待時間過多。

    簡單總結就是:IO密集多執行緒,計算密集執行緒=CPU核數比較合適。

  • 中秋節和大豐收的關聯?
  • 微軟surface平板電腦怎麼重灌系統?