1、业务需求
2、性能需要
3、可简化任务调度
4、并行程序在多核心CPU有优势:
a、比如因为IO操作遇到了阻塞,CPU可以转去执行其他线程,这时并发的优点就显示出来了:更高效的利用CPU,提高程序的响应速度。
b、java线程机制是抢占式的,会为每个线程分配时间片。
c、由于I/O等待,CPU较空闲,通过多进程/多线程让CPU忙起来,提升处理速度。通过多路复用,利用I/O等待的时间进行运算,让CPU干活,提升处理速度。
d、使用多路复用只能跑满一个核心,必须使用多进程/多线程才能充分利用多核。
e、利用Map/Reduce模式将任务分发到许多网络节点上,同时并行计算,通过对每个节点的返回值进行归并计算得到最终结果。
f、并发可以提高吞吐量:
假设每个请求执行100ms,顺序执行10个请求共需要1s,单核服务器并发处理10个请求,假设平均分配时间片10ms,请求1到请求10将在900ms到100ms间执行完毕。吞吐量没有任何提高。并发越多,所有请求都变得非常缓慢。(考虑到任务的场景切换开销,吞吐量还会下降,需要超过1s才能执行完毕)。
大多数web型应用都是IO密集型。
执行请求100ms当中,可能有80ms花在IO上,只有20ms消耗CPU时钟周期,最好情况下,请求1到请求10将在190ms到280ms间执行完毕,吞吐量极大提高。
IO密集型应用,大部分CPU花在等待IO上了,所以并发可以有效提高系统吞吐量。
IO操作的延时远远高于CPU时钟周期内存访问,所以一旦web请求涉及IO操作,CPU处于wait状态,被浪费了。