java并发编程中分配线程池数跟CPU密集型任务和I/O密集型任务有关

CPU密集型任务:应用主要是使用非常多的cup资源,进行无阻塞的逻辑运算,所以需要避免过多的线程上下文切换。所以线程数范围为:
线程数 = CPU核数+1
也可以设置成CPU核数*2,这还是要看JDK的使用版本,以及CPU配置(服务器的CPU有超线程)。对于JDK1.8来说,里面增加了一个并行计算,计算密集型的较理想线程数 = CPU内核线程数*2
IO密集型任务:是相对于IO操作比CPU计算操作占用更多的CPU时间来说的。如大部分的web应用开发会涉及到大量的网络传输;不仅如此,与数据库或是缓存间的交互也涉及到IO。一旦发生IO,就会使线程处于等待状态,所以我们可以稍微设置多一些线程池中线程的数量,这样就能让在等待IO的这段时间内,线程可以去做其它事,提高并发处理效率。
线程池中线程数范围为:
线程数 = CPU核心数/(1-阻塞系数)
    这个阻塞系数一般为0.8~0.9之间,也可以取0.8或者0.9。以上不是绝对的,需要根据实际情况以及实际业务来调整。

猜你喜欢

转载自xu-nuo.iteye.com/blog/2376417