CPU密集型应用
CPU密集型程序,一个完整请求的I/O操作可以在很短的时间内完成,CPU还有很多运算要处理,也就是说CPU运算的比例占很大一部分,线程等待时间接近0。
对于单核CPU处理CPU密集型程序,这种情况不太适合使用多线程,对于多核CPU处理CPU密集型程序,我们完全可以最大化的利用CPU核心数,应用并发编程提高效率。
CPU密集型程序的最佳线程数就是:理论上线程数量 = CPU核数(逻辑),但是实际上数量一般会设置为CPU核数(逻辑)+ 1(经验值),
CPU密集型的线程恰好在某时因为发生一个页错误或者因其他原因而暂停,刚好有一个“额外”的线程,可以确保在这种情况下CPU周期不会中断工作。
IO密集型应用
与CPU密集型程序相对,一个完整请求的CPU运算操作完成之后还有很多I/O操作要做,也就是说I/O操作占比很大部分,等待时间较长,线程等待时间所在比例越高,需要越多线程;
线程CPU时间所占比例越高,需要越少线程。
1、I/O密集型程序的最佳线程数就是:最佳线程数 = CPU核心数(1 / CPU 利用率) = CPU核心数(1 + (I/O耗时 / CPU耗时));
2、如果几乎全是I/O耗时, 那么CPU耗时就无限趋近于0,所以纯理论就可以说是2N(N=CPU核数),当然也有说2N+1的,1应该是backup。
3、一般我们说2N+1即可。