グローバルインタープリターロック(GIL)を必要とせずにスレッドを適切に実装できるJava仮想マシンについて根本的に異なる点について誰かが洞察を提供できることを望んでいますが、Pythonはそのような悪を必要とします。
Python(言語)はGILを必要としません(そのため、JVM [Jython]および.NET [IronPython]に完全に実装でき、これらの実装はマルチスレッドに自由に対応できます)。 CPython(一般的な実装)は、コーディングの容易さ(特にガベージコレクションメカニズムのコーディング)および非スレッドセーフなCコーディングされたライブラリの統合のためにGILを常に使用しています(多くの場合、これらは使用されていました。 -)。
nladen Swallow プロジェクトは、他の野心的な目標の中でも、 plan Python-そのサイトを引用するためのGILフリーの仮想マシン、 「さらに、GILを削除し、Pythonのマルチスレッドの状態を修正する予定です。これは、IBMのRecyclerのような、より洗練されたGCシステムの実装によって可能になると考えています(Bacon et al、2001)。
JVM(少なくともホットスポット)には「GIL」と同様の概念があります。ロックの粒度ははるかに細かく、ほとんどはホットスポットのGCの高度なものです。
CPythonでは1つの大きなロックであり(おそらくそうではありませんが、引数としては十分です)、JVMでは使用される場所に応じてさまざまな概念で広がります。
たとえば、ホットスポットコードのvm/runtime/safepoint.hppを見てください。これは事実上障壁です。セーフポイントに到達すると、VMは、Javaコードに関して、python VMはGILで停止します。
Java world such VM一時停止イベントは「stop-the-world」として知られています。これらのポイントでは、特定の基準にバインドされたネイティブコードのみがフリーランニング、残りのVMは停止されました。
また、Javaでの粗いロックの欠如は、JNIがFFI呼び出しの環境についての保証を少なくするため、JNIの記述がはるかに難しくなります。 ctypesを使用するほど簡単ではありません)。
このブログ投稿の下にコメントがあります http://www.grouplens.org/node/244 IronPythonまたはJythonのGILを簡単に省いた理由を示唆しています。 CPythonは参照カウントを使用しますが、他の2つのVMにはガベージコレクターがあります。
なぜこれが正確なのかはわからないが、もっともらしい理由のようだ。