大家如何估算线程池>数目/h2>
线程池的大小对系统的性能有一定的影响,过大或者过小的线程数量都无法发挥最优的系统性能,但是线程池大小的确定也不需要做的非常精确。因为只要避免极大和极小两种情况,线程池的大小对性能的影响都不会影响太大,一般来说,确定线程池的大小需要考虑CPU数量,内存大小等因素,在《Java Concurrency in Practice》 书中给出了一个估算线程池大小的经验公式:
公式:Nthread = Ncpu * Ucpu * (1+ W/C),各字段含义:

Nthreads:线程>数目/p>
Ncpu:CPU的数量,Runtime.getRuntime().availableProcessors()
Ucpu:CPU使用率,范围在[0,1]
W/C:等待时间与计算时间的比率
其实就是要分清是计算密集型还是IO密集型。
如果是C无限大也就是计算密集型的那么线程太多意义不大,因为需要CPU计算,起多了也没用。
如果是IO密集型那么可以起更多的线程,因为等待时间过多。
简单总结就是:IO密集多线程,计算密集线程=CPU核数比较合适。
欢迎关注笔者,持续分享有价值的优质架构文章。









