【问题标题】:PyPy vs Cpython, will either one drop GIL and support POSIX Threads? [closed]PyPy 与 Cpython,是否会放弃 GIL 并支持 POSIX 线程? [关闭]
【发布时间】:2013-07-10 22:28:47
【问题描述】:

鉴于 GIL 限制了 python 支持真正线程的能力,是否有可能将其从当前的 python 实现中剥离,以便该语言最终可以支持真正的多线程。此外,假设 GIL 被删除,这是否意味着多核线程最终会出现在 Python 和 Ruby 等脚本/解释语言中?

【问题讨论】:

  • 可能。但是当涉及到 C 扩展时,放弃他们的 gil 会破坏世界,并可能导致微妙的内存问题。同时,您始终可以进行多进程。

标签: python ruby gil


【解决方案1】:

你的问题有问题。 Python 支持线程就好了。事实上,当你在一个运行在 *nix 下的 Python 程序中创建一个线程时,它很可能会创建一个额外的 pthreads 线程,没有任何问题。 唯一的限制是 Python 代码不会并行运行(但它会同时运行、交错运行等)。不在 GIL 下的代码(例如几乎所有执行 I/O 的代码)不会阻止其他线程运行 Python 代码。

至于removing the GIL...很难。就像,真的很很难。你和我都可以假设这是不可行的(嘿,如果某些超人确实成功了,至少我们会感到惊喜)。其他实现(Jython、IronPython)没有 GIL,但它们的方法对于 CPython 并不实用(据我所知,对于 PyPy 也不容易),并且它们不能完全取代 CPython,因为它们落后很多, 不支持 C 扩展, 对更奇特的平台的移植性较差, 等等。

也就是说,一些 PyPy 开发人员正在研究一种 STM 解决方案 (latest update),可以将 PyPy 从 GIL 中解放出来。另一方面,CPython?我认为没有机会,即使是 STM,尤其是考虑到潜在的 ABI 和 API 损坏时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 2018-03-22
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多