Python 需要 GIL。但是 Jython 和 IronPython 没有。为什么?

标签 python multithreading ironpython jython gil

为什么不需要 GIL 就可以运行 Jython 和 IronPython,而 Python (CPython) 却需要 GIL?

最佳答案

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

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

关于Python 需要 GIL。但是 Jython 和 IronPython 没有。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3429159/

相关文章:

c# - 在 C# 中运行 python 模块?

python - 16 位二进制转换

python - 我可以在 map 函数中使用索引信息吗?

java - RxJava reduce() 在并行化时会不安全吗?

c# - 调用方法的结果到主线程

Python 返回的字符串既是 str 又是 unicode 类型

.net - 日期的自然语言解析器(.NET)?

python - 使用 Django 代替 app-engine 默认的 web 框架有什么优势?

python - 尝试删除具有 Unicode 名称的文件夹

c - 确保线程中的所有 Printf 都实际打印