【问题标题】:Python requires a GIL. But Jython & IronPython don't. Why?Python 需要 GIL。但是 Jython 和 IronPython 没有。为什么?
【发布时间】:2011-03-26 15:25:19
【问题描述】:

为什么无需 GIL 即可运行 Jython 和 IronPython,而 Python (CPython) 需要 GIL?

【问题讨论】:

标签: python multithreading ironpython jython gil


【解决方案1】:

解释器的某些部分不是线程安全的,尽管主要是因为通过大量使用锁使它们全部成为线程安全的会极大地减慢单线程(source)。这似乎与使用引用计数的 CPython 垃圾收集器有关(JVM 和 CLR 没有,因此不需要每次都锁定/释放引用计数)。但即使有人想到了一个可接受的解决方案并实施了它,第三方库仍然会遇到同样的问题。

请注意,用 C 编写的扩展实际上可以摆脱 GIL:http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lock

【讨论】:

    【解决方案2】:

    我的猜测,因为 CPython 所基于的 C 库不是线程安全的。而 Jython 和 IronPython 分别针对 Java 和 .Net 构建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多