鉴于 GIL 限制了 python 支持真正线程的能力,是否有可能将其从当前的 python 实现中剥离,以便该语言最终可以支持真正的多线程。此外,假设 GIL 被删除,这是否意味着多核线程最终会出现在 Python 和 Ruby 等脚本/解释语言中?
问问题
421 次
1 回答
2
你的问题有问题。Python 很好地支持线程。事实上,当你在一个运行在 *nix 下的 Python 程序中创建一个线程时,它很可能会创建一个额外的pthreads
线程,没有任何问题。唯一的限制是Python代码不会并行运行(但它会同时运行、交错运行等)。不在 GIL 下的代码,例如几乎所有执行 I/O 的代码,都不会阻止其他线程运行 Python 代码。
至于删除 GIL ......这很难。喜欢,真的真的很难。你和我可以假设这是不可行的(嘿,如果某个超人确实成功了,至少我们会感到惊喜)。其他实现(Jython、IronPython)没有 GIL,但它们的方法对于 CPython 并不实用(据我所知,对于 PyPy 也不容易),并且它们不能完全取代 CPython,因为它们落后很多, 不支持 C 扩展, 对更奇特的平台的移植性较差, 等等。
也就是说,一些 PyPy 开发人员正在研究一种 STM 解决方案(最新更新),该解决方案将从 GIL 中释放 PyPy。另一方面,CPython?我不认为有机会,即使是 STM,尤其是考虑到潜在的 ABI 和 API 损坏时。
于 2013-07-10T22:41:10.057 回答