Python的GIL


GIL全称Python Global Interpreter Lock,全局解释器锁。

GIL解决的问题

为了维护 python 变量的引用计数,该引用计数将用于垃圾收集。 同一进程内,多个解释器同时更新引用计数将产生竞争条件(race condition)。 在执行python字节码时需要保证线程安全。

为何Python选择了GIL作为解决方案

  1. 在操作系统还没有线程概念的时候,Python就已经出现了;
  2. 能提供线程安全的内存管理(垃圾收集);
  3. 易于实现,是python早期的设计者们所采用的解决复杂问题的简单方法。

GIL带来的问题

GIL的直接结果就是一个python进程只有一个解释器,从而导致一个python进程的多线程部分只能有一个解释器真正在执行。 对于CPU密集型任务,无法利用多核进行计算加速。

如何避免

  1. 使用多进程而不是多线程。即:使用multiprocessing库而不是自带的threading。前者启的是进程,后者启的是线程。

  2. 换用其他的py解释器。IronPython没有GIL。

参考

https://realpython.com/python-gil/


文章作者: Legend94rz
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Legend94rz !
评论
 上一篇
矩阵增量式求逆 矩阵增量式求逆
本文只讨论 狭义的可逆矩阵,首先必须是方阵。 背景&动机 暴力求一个矩阵的逆,时间复杂度是\(O(n^3)\),太高了。如果这个矩阵会随着时间越长越大,每长一次就要求一次逆,如何降低计算开销?再如果这个矩阵不光变大,还有可能缩小
2020-03-15 Legend94rz
本篇 
Python的GIL Python的GIL
GIL全称Python Global Interpreter Lock,全局解释器锁。 GIL解决的问题 为了维护 python 变量的引用计数,该引用计数将用于垃圾收集。 同一进程内,多个解释器同时更新引用计数将产生竞争条件(race
2020-03-15 Legend94rz
  目录