-
数据库连接池的个数
-
tomcat的请求连接数
-
线程池的线程数
-
waiting状态的线程会不会进行CPU切换??(写代码验证)
在许多场景下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统的速度差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。如果不希望处理器在大部分时间里都处于等待其他资源的空闲状态,就必须使用一些手段去把处理器的运算能力“压榨”出来,否则就会造成很大的性能浪费,而让计算机同时处理几项任务则是最容易想到,也被证明是非常有效的“压榨”手段。
java设置线程池大小,这里提供三个考量点:
1,一般情况程序线程数等于cpu线程数的两到三倍就能很好的利用cpu了
2,一个公式:线程池设定最佳线程数目 = ((线程池设定的线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目
这个公式的线程cpu时间是预估的程序单个线程在cpu上运行的时间(通常使用loadrunner测试大量运行次数求出平均值)
3,上面两个方案都是参考而已,给出个大概范围,最后最佳的线程池设定大小还是要根据实际情况,多次实验。
线程池中线程数量并不是越多越好,具体的数量需要评估每个任务的处理时间,以及当前计算机的处理器能力和数量。使用的线程过少,无法发挥处理器的性能;使用的线程过多,将会增加系统的无故开销,起到相反的作用。