GIL を必要とせずに Jython と IronPython を実行できるのに、Python (CPython) には GIL が必要なのはなぜですか?
2561 次
2 に答える
11
インタープリターの一部はスレッドセーフではありませんが、大規模なロックの使用によってすべてをスレッドセーフにすると、シングルスレッドが非常に遅くなるためです(ソース)。これは、参照カウントを使用するCPythonガベージコレクターに関連しているようです(JVMとCLRはそうではないため、毎回参照カウントをロック/解放する必要はありません)。しかし、誰かが受け入れ可能な解決策を考えてそれを実装したとしても、サードパーティのライブラリには同じ問題があります。
Cで記述された拡張機能は、実際にはGILを取り除くことができることに注意してください:http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lock
于 2010-08-07T05:06:37.620 に答える
3
私の推測では、CPython が構築されている C ライブラリはスレッドセーフではないためです。一方、Jython と IronPython は、それぞれ Java と .Net に対して構築されています。
于 2010-08-07T04:50:33.533 に答える