通常我们设置程序线程池的时候都会想,怎么设置这个参数好?太大了支撑不起,太小了浪费资源,怎么样最大化利用线程数?
一般说来,大家认为线程池的大小经验值应该这样设置:(其中n为CPU的个数)
- 如果是CPU密集型应用,则线程池大小设置为n+1
- 如果是IO密集型应用,则线程池大小设置为2n+1(因为io读数据或者缓存的时候,线程等待,此时如果多开线程,能有效提高cpu利用率)
如果一台服务器上只部署这一个应用并且只有这一个线程池,那么这种估算或许合理,具体还需自行测试验证。
但是,IO优化中,这样的估算公式可能更适合:
最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目</