并发和并行从宏观上来讲都是同时处理多路请求的概念。(同一时间点开始的)
并行与并发的区别:
1. 并行是指两个或者多个事件在同一时刻发生 并发是指两个或多个事件在同一时间间隔内发生。
2. 并行是在不同实体上的多个事件 并发是在同一实体上的多个事件。
3. 在一台处理器上“同时”处理多个任务 在多台处理器上同时处理多个任务(hadoop分布式集群)
并发的优点(最主要的目的):
并发可以将CPU的计算能力发挥到极致,性能得到提升。
因为并发是在同一实体(比如一个CPU)上,那么如果他串行(单线程)处理任务,当有多个任务向CPU请求执行时,CPU只能执行一个,这样CPU就会等待这个任务结束才会处理其他任务,利用率很低;而开启多线程并发执行时,多个线程就会进行切换去抢占CPU,CPU的空闲时间就会减少,从而提高处理性能。
并发的缺点:
并发程序之间有相互制约关系:
1.直接制约体现为一个程序需要另一个程序的计算结果;
几个栗子:求平均值:
先求和,然后再算平均值两个任务,当求和这一项没有被执行的时候,即使cpu切换到求平均值这个进程上,也无法 执行这个进程,因为他现在需要,求和的进程执行的结果才可以进行运算执行。
2.间接制约体现为多个程序竞争某一资源,如处理机、缓冲区等。
3.并发程序在执行中是走走停停,断续推进的。
从并发的有点与缺点上就可以看出,并发解决了多个事件同时处理时效率低,性能低的问题;但如果只需要处理一个事件的时候,他的效率和性能并没有提高,也就没必要使用并发;那么如何提高对处理一个事件的效率和性能呢-----------并行。
并行的提出解决了对一件事情的处理效率和性能低的问题:
并行以hadoop分布式集群的栗子来说明:
首先复习下这个:jar包提交运行在yarn上的执行流程:
1.用户提交jar包,向resourcemanager请求提交任务
2.resourcemanager接受任务,并随机选择一台nodemanager启动appmaster
3.appmaster向resourcemanager请求资源
4.resourcemanager分配资源,并将资源分配信息返回给appmaster
5.appmaster联系nodemanager启动相关Task
6.运行的task时刻向appmaster汇报进度
7.reduce task将执行结果返回给appmaster
8.appmaster将结果返回给resourcemanager,并注销自己
·
·
·
·
·
·
·
·
·
(不考虑数据倾斜,每台机器都会运行map和reduce,这样可以达到多台机器同时对一件事进行处理大大提高效率和性能)。
并行:
同一时刻可以处理多个任务 ;两个并行执行的任务如下图:
并发:
同一时刻只能处理一个任务,但一个时间段内可以对多个任务交替处理 ;两个并发执行的任务如下图 :
几个栗子:
并行:相当于两个人给两个地方搬砖,因为他们是同时进行的。
并发:相当于一个人给两个地方搬砖,轮流给两个地方搬砖,因为他是交替进行的。
总结:
并发是两个任务可以在重叠的时间段内启动,运行和完成。
并行是任务在同一时间运行,例如,在多核处理器上。
并发是独立执行过程的组合,而并行是同时执行(可能相关的)计算。
并发是一次处理很多事情,并行是同时做很多事情。