私はちょうどPythonを学び始めたばかりで、GILとそれがどのように「本当の」マルチスレッドを妨げるのか聞いたことがあります(これは、複数のスレッドが同時に異なるコアで動作することを可能にします)。VMはそのスレッドにスレッドごとに複数のインスタンスを必要としますか?
ここで、GILを削除すると、別のコアで実行されている各スレッドは、実行するためにVMの別のインスタンスを必要としないのですか? JVMにも同じ問題がありますか?
もしそうなら、VM上で解釈され/実行されるプログラムに対してスレッドを使用することには利点がありますか?(POSIXスレッド対プロセスのパフォーマンスの向上とは別に - すごいね)?スレッドごとにVMのインスタンスを個別に持つ必要があるため、オーバーヘッドのように見えます。
ありがとうございました。
ご返信ありがとうございます。実際には各スレッドで実行されているPython/Javaコードを実行するためには、各スレッドごとに別々のVMインスタンスが必要であると思っていました(マシンコードではないので、VMと複数の命令 –
@Arash:まあ、PythonはJavaよりもダイナミックであるためにかなり多くの作業をしています。たとえJavaがまだ厳密に解釈されていても、その解釈は複数のスレッドで発生する可能性があります。しかし、ほとんどの場合、ほとんどのJavaコードは実際には* JITコンパイルされたバイトコードから直接マシンコードを実行しています。 –
したがって、すべての解釈を行っているVMコード自体がマルチスレッド化される可能性があるため、VMによって実行される異なるスレッドで実行されているコードは、実際のVMを実行する異なるスレッドによって実行されています。 –