在学习多线程和多进程之前我们需要了解两种工作模式 ---- 并行与并发。
并行与并发
并行与并发是这样定义的:
- 并发(Concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。
- 并行(Parallelism):把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时运行。
下图展示了并行与并发的工作方式:
如果你不能理解,我们来举一个例子。比如你在看世界杯⚽🏆喝啤酒🍺和吃热狗🌭,我们把它们看作三个任务。
并发模式就是我一次只处理一个任务,我咬一口热狗,喝一口啤酒看一眼球赛任务交替进行。
并行模式就是我看着球赛喝着啤酒还同时吃着热狗,任务可以同时进行。就像这位小哥一样:
但这个例子并不准确,只是帮助理解。
并发
对于早期单核CPU来说,一个 CPU 在同一时间只能执行一个任务,当系统中有多个任务等待执行时,CPU 只能执行完一个再执行下一个。这导致 CPU 经常处于空闲状态,只能等待操作完成后才能继续执行后面的指令。
为了提高 CPU 利用率,减少等待时间,人们提出了一种 CPU 并发工作的理论。所谓并发,就是通过一种算法将 CPU 资源合理地分配给多个任务,有效避免了 CPU 被某个任务长期霸占的问题,极大地提升了 CPU 资源利用率。
虽然 CPU 在同一时刻只能执行一个任务,但是通过将 CPU 的使用权在恰当的时机分配给不同的任务,使得多个任务在视觉上看起来是一起执行的。CPU 的执行速度极快,多任务切换的时间也极短,用户根本感受不到,所以并发执行看起来才跟真的一样。
伪并发和真并发
伪并发是指单核处理器的并发。
真并发是指多核处理器的并发。
并行
并发是针对单核 CPU 提出的,而并行则是针对多核 CPU 提出的。和单核 CPU 不同,多核 CPU 真正实现了“同时执行多个任务”。
多核 CPU 内部集成了多个计算核心(Core),每个核心相当于一个简单的 CPU,如果不计较细节,你可以认为给计算机安装了多个独立的 CPU。
多核 CPU 的每个核心都可以独立地执行一个任务,而且多个核心之间不会相互干扰。在不同核心上执行的多个任务,是真正地同时运行,这种状态就叫做并行。