进程与线程
进程是计算机资源分配的最小单元,指程序执行时的一个实例。
线程是程序执行的最小单位,是计算机中可以被 CPU 调度的最小单元。
进程之间资源相互独立,有不同的内存空间。
一个进程可以有多个线程,同一个进程中的线程共享此进程中的资源。
并行与并发
并行是指两个或者多个事件在同一时刻发生。
并发是指两个或多个事件在同一时间间隔内发生。
Python 中的 GIL
Python 全局解释器锁(GIL)是一个互斥锁,用于保护对 Python 对象的访问,防止同一进程中的线程同时执行。因为 GIL 的存在,实际上 Python 进程不能并行运行线程,只能并发运行线程。
GIL 是必要的,因为Python 的解释器不是线程安全的。在线程中访问 Python 对象时,每次都会执行这个全局锁。在任何给定的时间,只有一个线程可以为特定对象获取锁。
Python 中的并行任务
由于 GIL 的存在,我们想利用多核系统并最终在真正执行并行任务,我们需要执行多进程而不是多线程。因为每个进程都将拥有自己的解释器和自己的 GIL 。
Python 中的多任务
由于线程之间资源是共享的以及 GIL 的存在,因此多线程适用于 I/O 密集型任务。
由于不同线程可以调用不同的 CPU 资源,因此多进程适用于 CPU 密集型任务。