并发与并行

2020-11-24 10:18:22 浏览数 (1)

点击上方“晏霖”,选择“置顶或者星标”

曾经有人关注了我

后来他有了女朋友

2.2.1认识并发与并行

我们理解了什么是线程,以及线程与进程对关系,那么我们现在可以简单理解为,并发就是在同一时刻多个线程操作同一物理CPU(或多个物理CPU)上的资源。

百度百科中,并发是指在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

同样,为了方便理解,我们利用生活中的一种模型去解释,把线程比作汽车,汽车通过高速收费站,假设收费站只开了一个收费口,这时所有车道上的汽车交替并入收费口通过,这个场景就是并发。这时我们脑子里马上就会反应出,如果只开一个收费口那么多的汽车肯定不是一个好方法,所以实际情况往往是开多个收费口,这就叫“并行”,所以我们概念性总结什么是并行?并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。在开发中也是无时无刻用到并行操作,例如处理集合我们可以使用parallelStream()并行流处理方法,他是线程不安全,用的时候要注意。

我们用下面两个图形象说明并发和并行。

图 2-2

图2-3

2.2.2并发、并行、线程之间的关系

我们利用一组图说明并发、并行和多线程的关系

图 2-4

图2-5

从图2-2我们看出并发是一个处理器在同一时间内处理多个事件,但并不是同时,其实是线程A、B、C是处理器通过时间片进行切换,实际情况中我们感觉好像是多个线程同时处理,那是因为处理器切换速度快。

从图2-3我们看出并行需要两个或两个以上的线程跑在不同的处理器上,因此并行是物理上的同时发生,是真实的同时。

通过上面的解释我们应该对线程、并发和并行有了一定认识,因此并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。并行包含并发,但并发小于并行。不管并发还是并行,都提高了程序对CPU资源的利用率,最大限度地利用CPU资源。

2.2.3并发和并行的区别

此小章节的内容是对上面并发与并行找出不同点,并发与并行本身就是一种概念性的理解,他可以理解成程序执行的一种模型,并发和并行离不开线程,无论是并发还是并行都是多核CPU在多线程下的执行形式。

区别一:并发是指一个处理器同时处理多个任务。并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。

区别二:并行(parallel)指在同一时刻,有多条指令在多个处理器上同时执行。无论从微观还是从宏观来看,二者都是一起执行的。并发(concurrency)指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。

我所指宏观是站在系统层面上看多个程序运行情况,微观是站在每一个线程对角度上看线程的执行情况。

区别三:当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状态。这种方式我们称之为并发(Concurrent)。当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。

胖虎

热 爱 生 活 的 人

终 将 被 生 活 热 爱

我在这里等你哟!

0 人点赞