并发和并行
- 并行是指两个或者多个事件在同一时刻发生,而并发是指两个或多个事件在同一时间间隔发生。
- 并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
并发针对单核 CPU 而言,它指的是 CPU 交替执行不同任务的能力;并行针对多核 CPU 而言,它指的是多个核心同时执行多个任务的能力。
单核 CPU 只能并发,无法并行;换句话说,并行只可能发生在多核 CPU 中。
并发只有结合 I/O 多路复用、异步 I/O 才能实现并发能力。
Python 中并发/并行和多线程/多进程模型的关系
线程和并发/并行
首先了解一下线程的概念:
在操作系统中,线程是 CPU 调度和执行任务的基本单位,是进程中的一条执行流。进程是资源分配的基本单位,每个进程都至少有一个线程,多个线程共享所属进程的内存空间。
我们说并发是指同一时间段内 CPU 交替执行不同任务,其实就是 CPU 不断切换执行线程。线程是最小执行单元。
那么并发 = 单核 CPU 多个线程交替切换执行,并行 = 多核 CPU 多个线程同时执行。
在大多数语言如 Java 中,多个线程是可以在多核 CPU 上执行的,Java 多线程模型 = 并发 + 并行
Python 并发/并行
在 Python 中存在 GIL (全局解释器锁),同一进程同一时刻,只能有一个线程执行。即使没有单核 CPU 的物理限制,但程序被加锁,