大家如何估算线程池数量?
大家如何估算线程池数量?
线程池的大小对系统的性能有一定的影响,过大或者过小的线程数量都无法发挥最优的系统性能,但是线程池大小的确定也不需要做的非常精确。因为只要避免极大和极小两种情况,线程池的大小对性能的影响都不会影响太大,一般来说,确定线程池的大小需要考虑CPU数量,内存大小等因素,在《Java Concurrency in Practice》 书中给出了一个估算线程池大小的经验公式:
线程池的大小对系统的性能有一定的影响,过大或者过小的线程数量都无法发挥最优的系统性能,但是线程池大小的确定也不需要做的非常精确。因为只要避免极大和极小两种情况,线程池的大小对性能的影响都不会影响太大,一般来说,确定线程池的大小需要考虑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核数比较合适。
欢迎关注笔者,持续分享有价值的优质架构文章。
以上内容是万老网对获取线程cpu使用率的问题就介绍到这了,希望介绍关于获取线程cpu使用率的1点解答对大家有用。