python 全局解释器锁_Python全局解释器锁(GIL)

1.什么是Python的GIL?

GIL是Python的全局解释器锁,它是一个互斥锁。它确保在任何时间点只能有一个线程处于执行状态,即使在具有多个cpu内核的多线程体系结构中也是一样,这是造成python无法很好的利用计算机多核的原因

2.GIL处理了什么问题?

CPython的垃圾回收器使用一种称为引用计数的有效内存管理技术。Python中的每个对象都有一个引用计数,当它分配给新的变量名称或者添加到容器(元组、列表等)时,引用计数就会增加。同样,当引用超出范围或调用del语句时,引用计数也会减少。当对象的引用计数达到0时,将对其进行垃圾回收,并释放已分配的内存。

但是引用计数变量像任何其他全局变量一样容易出现竞争条件。另外如果向每个对象添加一个锁,这将导致死锁,并增加acquire和release调用的开销。

所以才有了全局解释器锁。另外仅在CPython中才有GIL,在其他如Jython、IronPython解释器中并没有GIL。

3.怎么降低GIL对Python性能的影响?

尽量避免在CPU密集型的场景下使用python线程,而是使用多进程,这样每个python进程都有自己的解释器和内存空间。如使用python标准库中的multiprocessing。

另一方面,python的多线程更适合在I/O密集型的场景下使用,因为一个线程处在IO等待的时候,另一个线程还可以在CPU里面跑,有时候CPU闲着没事干,所有的线程都在等着IO,这时候他们就是同时的了,而单线程此时还是在一个一个等待的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值