python并发编程: Python速度慢的罪魁祸首,全局解释器

2023-05-10  本文已影响0人  cf6d95617c55

python速度慢的两大原因

GIL是什么?

全局解释锁(Global Interpreter Lock,GIL)是计算机程序设计语言解释器用于同部线程的一种机制,它使得任何时刻仅有一个进程在执行。即使在多核心处理器上,使用GIL的解释器也只允许同一时间执行一个线程。


在上图中的流程:

  • 当线程1在运行的时候,则会启动GIL
  • 当线程1需要进行IO操作时,GIL则会释放,此时线程1切换到线程2运行,GIL再次启用。
  • 当线程2运行IO时,GIL再次释放,此时线程2切换到线程3,GIL则再次启用。

为什么有GIL这个东西?

为了解决多线程之间数据完整性和状态同步问题。 举例子:Python中对象的管理,是使用引用计数器进行的,引用数为0则释放对象。开始:线程A和线程B都引用了对象obj,obj.ref_num = 2,线程A和B都想撤销对obj的引用

上图中线程A和线程B都引用了对象obj, 首先,线程A准备销毁obj引用,将计数器减1,刚减完,切换到了线程B, 线程B也要销毁obj引用,将计数器减1,然后判断引用等于0,则将其释放掉。 当切换到线程A继续执行的时候,发现obj的引用已经无法获取计数器的值了。 所以,就报错了。

怎么规避GIL带来的限制?

总结

本文由mdnice多平台发布

上一篇 下一篇

猜你喜欢

热点阅读