GIL全称Python Global Interpreter Lock,全局解释器锁。
GIL解决的问题
为了维护 python 变量的引用计数,该引用计数将用于垃圾收集。 同一进程内,多个解释器同时更新引用计数将产生竞争条件(race condition)。 在执行python字节码时需要保证线程安全。
为何Python选择了GIL作为解决方案
- 在操作系统还没有线程概念的时候,Python就已经出现了;
- 能提供线程安全的内存管理(垃圾收集);
- 易于实现,是python早期的设计者们所采用的解决复杂问题的简单方法。
GIL带来的问题
GIL的直接结果就是一个python进程只有一个解释器,从而导致一个python进程的多线程部分只能有一个解释器真正在执行。 对于CPU密集型任务,无法利用多核进行计算加速。
如何避免
使用多进程而不是多线程。即:使用multiprocessing库而不是自带的threading。前者启的是进程,后者启的是线程。
换用其他的py解释器。IronPython没有GIL。