线程池须要设置适合的大小,如果设置的太大,线程上线文切换过于频繁,造成大量资源开销,反而会使性能升高。如果设置的太小,存在很多可用的处理器资源却未在工作,会造成资源的节约和对吞吐量造成损失。
为了充分利用处理器资源,创立的线程数至多要等于处理器外围数。如果所有的工作都是计算密集型的,那么线程数等于可用的处理器外围数就能够了。不过,如果所有的工作都是 IO 密集型,那么处理器大部分工夫是闲暇的,所有要适当的减少线程数。 线程等待时间所占比例越高,须要越多线程。线程运算工夫所占比例越高,须要越少线程。 于是能够应用上面的公式进行估算:
最佳线程数 =(1 + 线程等待时间 / 线程计算工夫) 指标 CPU 的使用率 处理器外围数
例如:均匀每个线程计算运行工夫为 0.5s,而线程等待时间(非计算工夫,比方 IO)为 1.5s,指标 CPU 的使用率是 90%,CPU 外围数为 8,那么依据下面这个公式估算失去:(1 + 1.5/0.5) 90% 8 = 28.8。
即便有下面的简略估算办法,兴许看似正当,但实际上也未必正当,都须要联合零碎真实情况(比方是 IO 密集型或者是 CPU 密集型或者是纯内存操作)和硬件环境(CPU、内存、硬盘读写速度、网络情况等)来一直尝试达到一个符合实际的正当估算值,也能够尝试 Dark Magic 的估算办法 。