2010-08-07 50 views
4

爲什麼您可以在不需要GIL的情況下運行Jython和IronPython,但是Python(CPython)需要GIL?Python需要一個GIL。但Jython和IronPython沒有。爲什麼?

+2

見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

+1

@Alex Martelli,那篇文章確實提出了同樣的問題,但沒有答案解釋爲什麼cpython需要一個GIL。 – JamesD 2010-08-07 05:12:33

回答

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

相關問題