在使用java编写多线程程序时,往往会用到线程池,在创建线程池时,又需要我们设置线程池的大小,那么线程池的大小与机器的CPU有怎样的关系那?
首先明白几个有关CPU的概念。
cpu总核数= 物理cpu个数*每颗物理CPU的核数
cpu总逻辑单元个数= 物理cpu个数*每颗物理cpu核数*超线程数
注意:超线程数量一般是2,比如intel,但是也有是4的,比如IBM的某款处理器
在我们编写的程序中,一般会分为两类:一类是IO密集型程序,另一类是计算密集型程序。
针对IO密集型程序,比如数据库交互、文件上传、网络数据传输等,设置线程数量:
设置线程数量为:2*cpu总逻辑单元个数
针对计算密集型程序,比如数据转换、递归算法、复杂的算法、加解密等,设置线程数量:
1*cpu总逻辑单元个数+1
其中,第一个1,表示的是CPU的个数。