图解|为什么Python多线程无法利用多核
来源:微信公众号:后端技术指南针
出处:;mid=2247485445 --tt-darkmode-bgcolor: #131313;">1.全局解释锁如题: Python的多线程为什么不能利用多核处理器?
全局解释器锁(Global Interpreter Lock)是计算机程序设计语言解释器用于同步线程的一种机制 , 它使得任何时刻仅有一个线程在执行 。
即便在多核处理器上 , 使用 GIL 的解释器也只允许同一时间执行一个线程 , 常见的使用 GIL 的解释器有CPython与Ruby MRI 。
可以看到GIL并不是Python独有的特性 , 是解释型语言处理多线程问题的一种机制而非语言特性 。
2.Python的解释器Python是一门解释器语言 , 代码通过解释器执行 , Python存在多种解释器 , 分别基于不同语言开发 , 每个解释器有不同的特点 。
Python程序的解释和执行过程简图:
文章插图
- CPython
- Jython
- IronPython
在交互效果上有所增强 , 但执行过程和功能方面和CPython是一样的 。
- PyPy
PyPy在处理python代码的过程中 , 一小部分功能的处理和CPython的执行结果是有差异的 , 如果项目中要使用PyPy来进行执行效率的提升的话 , 一定要事先了解下PyPy和CPython的区别 。
3.CPython的线程不安全CPython的线程是操作系统的原生线程 , 在Linux的pthread完全由操作系统调度执行 。
pthread本身不是线程安全的 , 需要使用者通过锁来实现多线程的安全运行 , 因此CPython解释器下的Python实现多线程也必然存在线程不安全的问题 。
这就为GIL在多核时代的使用埋下了隐患 。
4.GIL产生背景和挑战Python是Guido van Rossum 在1989年发布的 , 那个时候计算机的主频还没有达到1G , 程序全部都是运行在单核计算机上面 , 直到2005年多核处理器才被Intel开发出来 。
Python各版本发布时间轴:
文章插图
4.1 多核化对软件系统的冲击戈登·摩尔 1965 年预测 , 每个集成电路的元件数量每 18 到 24 个月就会翻一倍 , 它的适用性预计会持续到 2015-2020 年 。
文章插图
摩尔定律未失效前软件系统可以单纯借助硬件的进步来获得性能的提升或者只需少量改进 , 就可以坐享性能飞跃 。
然而从 2005 年开始 , 时钟速率的增长和晶体管数量的增长已不再同步 。
由于处理器材料的物理性质限制 , 时钟速率已停止增长甚至下降 , 处理器制造商开始将更多执行单元核心封装到单个芯片中 。
这一趋势给应用程序开发和编程语言设计带来越来越大的压力 。
程序员和编程语言决策者不得不考虑如何快速适应多核硬件 , 来提高软件性能和编程语言的市场占有率 , Python也不例外受到冲击 。
4.2 多核化对CPython的冲击在单核时代 , 崇尚优美、清晰、简单的吉多.范罗苏姆选择在解释器层面实现了一把全局互斥锁 , 来保护Python对象从而实现对单核CPU的使用率 , 这种做法在单核时代很奏效 。
倘若在单核时未选择GIL , 那么开发者就需要自己实现任务的管理 , 这样做对于CPU的利用率提高无法做到极致 。
图为Python之父吉多.范罗苏姆:
文章插图
但是随着多核时代的到来 , 高效地利用CPU 核心的有效方法就是使用并行性 , 多线程是充分实现并行的好方法 , 但是CPython的GIL却阻碍了对多核CPU的利用 。
4.3 痛并快乐着的GILCPython的GIL给使用者带来了便利 , 并且在GIL的基础上开发了许多重要的Package和语言功能 。
但是多核CPU的普适和其他语言对Python的冲击 , 让GIL显得原始而粗暴 , 无法有效利用多核处理器成为了弊端 。
5.多核时代GIL暴露的问题要搞清楚GIL对多线程程序的影响就要了解GIL的运行基本原理 。
- 看不上|为什么还有用户看不上华为Mate40系列来看看内行人怎么说
- 制药领域|为什么AI制药这么火,为什么是现在?
- 手机壳里头|为什么要在手机壳里面夹钱?10个有9个不懂,我才知道大有讲究
- 短视频|全球最火APP?抖音爆火背后离不开这几剂“猛药”为什么抖音能够这么火?
- 电商快递|包邮不香吗,为什么还有人加49元让小哥穿西装专车送快递?
- 团队|为什么项目管理非常重要?
- 猫腻|为什么拼多多上商品价格那么便宜还包邮?有什么猫腻?看完明白了
- 刷机|前几年满大街的“刷机”服务去哪里了,为什么大家都不爱刷机了?
- 手机|便宜没好货!为什么二手iPhone很便宜,这些手机都来自哪儿?
- 中国|相对论Vol.48丨一个“歪果仁”,为什么要在海外电商平台直播带中国货