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,这时候他们就是同时的了,而单线程此时还是在一个一个等待的。
本文来自博客园,作者:GreeneGe,转载请注明原文链接:https://www.cnblogs.com/greene/p/13620463.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?