一个小白想法, Python 为什么不通过命令行开关切换两种 GIL 模式?

2021-10-23 22:04:15 +08:00
 O5oz6z3
最近 python 出现一个惊艳的 no-gil 设计,想必大家已经知道了。

那么对于 python GIL 这个老问题,似乎常见的说法是:
粗粒度的 GIL 降低多线程的性能,细粒度的 GIL 降低单线程的性能。

那为什么不全都要,通过命令行开关切换两种 GIL 模式?
我本身并不太懂同步原语、线程安全、并行编程这些,所以想请教一下。欢迎指正!
3877 次点击
所在节点    Python
27 条回复
O5oz6z3
2021-10-25 09:46:08 +08:00
@hsfzxjy #13
感觉“抽象泄露”有点像是“依赖副作用”,不知道算不算是“隐式依赖 GIL”?
看来 GIL 即使真的能去掉,距离正式使用也很漫长。

@sujin190 #16
因为我也不懂具体细节,所以还想着把 GIL 版本的初始化方法用的函数和数据结构复制修改成细粒度锁模式也许行得通。
sujin190
2021-10-25 11:06:36 +08:00
@O5oz6z3 #21 问题就在于解析器你能复制数据结构再搞一遍,但是那么多模块和扩展怎么办,你说的这种不仅有人想过还有人搞过,但是有个啥用,各种模块扩展都不兼容,那这样的 python 还有个啥用,现在 python 重要使用的场景中数学计算、web 、人工智能、爬虫,几乎都不受 GIL 影响,语言自身性能不高主要也不是 GIL 导致的,从这些来说搞掉 GIL 并不是一个十分重要的事情,从 Python 编译成执行的字节码来看,对比 GO 、Rust 这种的编译器优化水平,似乎 python 的编译器还是有改进的空间的,以及 jit 支持之类的显然收益更高吧
O5oz6z3
2021-10-25 16:02:06 +08:00
@sujin190 #22
明白了,比起对付 GIL ,还是先提升单线程的性能更划算。
qdcanyun
2021-10-26 18:56:51 +08:00
其实是有可能有的,Python Core Developer Łukasz Langa 最近写的 [Blog]( https://lukasz.langa.pl/5d044f91-49c1-4170-aed1-62b6763e6ad0/) 中记录了 Python 核心开发团队和 nogil 的作者 Sam Gross 沟通的一些内容,其中就有提到
> **Q: Is runtime enabling of nogil a long-term viable option or a transitional feature?**
> Ideally the end game is CPython without the GIL, period. However, there will be an expected long period of community adaptation. We want to avoid a rift similar to the Python 2 to Python 3 transition. Rather, we want the transition to be easier, even if that means stretching it over a longer period of time.

如果未来 nogil 能够 merge 进主干代码里,那么一开始势必会有一个 option 来让用户选择开关 GIL
至于为什么现在没有,其实可以看 Sam Gross 的那个文档,以及上面提到的 Blog ,去掉 GIL 不是简单的直接删掉 GIL 对象,涉及到 GC ,内存分配,以及不少基础库的改造
lolizeppelin
2021-10-31 20:15:16 +08:00
async 这么多年了都没把全部库搞定
gil 起码搞 10 年
chinesehuazhou
2021-11-21 09:22:35 +08:00
楼上 @qdcanyun 提到了核心开发跟 nogil 作者的对话。未来估计会出现这么个开关。对话全文我翻译出来了,贴个链接: https://mp.weixin.qq.com/s/SvUyyUGLZFbqEyERWWJIYQ
O5oz6z3
2021-12-08 15:59:59 +08:00
才发现好像在以前,GIL 默认就是多线程时才会主动开启? docs.python.org/zh-cn/3/c-api/init.html#c.PyEval_InitThreads

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/810078

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX