Java开发,配置线程池时线程数应该怎么设置
合理的设置线程数能有效提高 CPU 的利用率,设置线程数又得区分任务是CPU密集型
还是 IO密集型
。
解释
CPU密集型
就是需要大量进行计算任务的线程,如:计算1+2+3+…、计算圆周率、视频解码等,这种任务本身不太需要访问I/O设备,CPU的使用率高;IO密集型
就是任务运行时大部分的时间都是CPU在等I/O (硬盘/内存) 的读/写操作,如:查询数据库、文件传输、网络请求等,CPU的使用率不高。
根据经验
1 | 1、CPU密集型:线程数少一点,推荐:CPU内核数 + 1 |
PS:这种方式可能会被面试官找茬
根据计算公式
根据《Java并发编程实战》书中的计算线程数的公式
1 | Ncpu = CPU的数量 |
实战
假如在一个请求中,计算操作需要10ms,DB操作需要100ms,对于一台2个CPU的服务器,设置多少合适
1 | 假设我们需要CPU的使用率达到100%,那么套入公式:`2 x 1 x (1 + 100/10) = 22` |
但是实际开发中,可能有各种因素的影响,因此就需要我们在这个结果的基础上进行压力测试,最终得到一个完美的线程数量
最后补个网图,解释了CPU密集型、IO密集型
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 知了小站!
评论