为什么您可以在不需要GIL的情况下运行Jython和IronPython,但是Python(CPython)需要GIL?Python需要一个GIL。但Jython和IronPython没有。为什么?
4
A
回答
2
我的猜测是,因为CPython构建的C库不是线程安全的。 Jython和IronPython分别针对Java和.Net构建。
8
解释器的部分内容不是线程安全的,但主要是因为通过大量锁定使用它们全部线程安全会使单线程极其缓慢(source)。这似乎与使用引用计数的CPython垃圾回收器相关(JVM和CLR不会,因此不需要每次锁定/释放引用计数)。但即使有人想到可接受的解决方案并实施它,第三方库仍然会有同样的问题。
需要注意的是C语言编写的扩展实际上可以摆脱GIL的:http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lock
相关问题
- 1. IronPython和Jython与CPython有相同的GIL问题吗?
- 2. 为什么HttpContext.Current需要一个类中使用,但没有一个方法
- 3. 为什么bcrypt需要C++和Python?
- 4. 在Ironpython中使用ipython需要什么?
- 5. 有什么区别,为什么两个需要在NSDate:timeIntervalSince1970和timeIntervalSinceReferenceDate?
- 6. 为什么try块需要一个catch
- 7. 为什么Fortran POINTER需要一个TARGET?
- 8. 为什么你需要一个Hyper-V?
- 9. 为什么需要一个会话bean?
- 10. 为什么这里需要一个锁?
- 11. 什么是可能的原因需要一个文件,但它并没有跑
- 12. 注入gridView需要VerifyRenderingInServerForm。但为什么?
- 13. 需要Oracle sqlldr TRAILING NULLCOLS,但为什么?
- 14. 为什么C程序需要反编译器,但python程序不需要?
- 15. 为什么Python中的namedtuple需要一个名字?
- 16. 为什么我需要一个需要实例的方法?
- 17. Python - 机械化:为什么需要CookieJar?
- 18. 为什么Python需要“self”参数?
- 19. Python:需要整数。哪里?为什么?
- 20. 为什么Python的__import__需要fromlist?
- 21. 为什么某些组件需要“需要UIExplorerBlock”和“需要UIExplorerPage”?
- 22. Ruby需要'文件'不起作用,但需要'./file'。为什么?
- 23. 为什么需要
- 24. VBScript中没有做什么需要
- 25. 为什么我需要'需要'一个已编译和加载的模块?
- 26. 为什么加法需要检查null但总和不需要检查null?
- 27. 为什么我要为一个匿名类“需要opCmp”?
- 28. 为什么我需要一个没有端点的USB备用接口?
- 29. 为什么我需要一个没有'创建会话'权限的Oracle用户?
- 30. 为什么没有订阅超载只需要一个错误处理程序?
见http://stackoverflow.com/questions/991904/why-is-there-no-gil-in-the- java-virtual-machine-why-does-python-need-one-so-bad/991917#991917。 – 2010-08-07 05:05:35
@Alex Martelli,那篇文章确实提出了同样的问题,但没有答案解释为什么cpython需要一个GIL。 – JamesD 2010-08-07 05:12:33