X Tutup
Skip to content

Latest commit

 

History

History
24 lines (12 loc) · 1.23 KB

File metadata and controls

24 lines (12 loc) · 1.23 KB

Python 多线程机制

GIL

GIL(Global Interpreter Lock, 全局解释器锁),是 Python 内部多线程之间的一种互斥锁,为了保护在多线程之间共享的全局资源(例如引用计数器)。因为只有获得了 GIL 的线程才可以运行,所以 GIL 保证了同一时刻只有一个线程运行。

由于 GIL 的存在,Python 中的多线程无法利用多核 CPU,因为同一时刻只有一个线程可以运行,只能利用单个 CPU,其余 CPU 处于闲置状态。

GIL 的锁粒度比较大,对多线程的性能损耗较大。假如移除 GIL,转而使用细粒度的锁,只在访问共享资源时进行加锁操作,这样看起来可以提高多线程的效率,但是:

  • 由于使用的锁较多,容易导致死锁。

  • 由于使用的锁较多,频繁加锁/解锁,对单线程来说,性能低于 GIL 版本。

综合来看,GIL是一种目前比较合适的多线程方案。

线程调度

当一个线程运行了一定数量的字节码之后,Python 将该线程挂起,唤醒别的线程。字节码的数量可以通过sys.getcheckinterval()获取。

线程实现

Python 中的线程是对操作系统的原生线程的封装,具体实现在 threadmodule.c

X Tutup