大家如何估算線程池數量?
線程池的大小對系統的性能有一定的影響,過大或者過小的線程數量都無法發揮最優的系統性能,但是線程池大小的確定也不需要做的非常精確。因為只要避免極大和極小兩種情況,線程池的大小對性能的影響都不會影響太大,一般來說,確定線程池的大小需要考慮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核數比較合適。
歡迎關注筆者,持續分享有價值的優質架構文章。
上一篇怎么用Microsoft
下一篇抖店為什么總是登錄過期