我刚刚开始学习Python并听说过GIL以及它如何防止“真正的”多线程(我的意思是允许多个线程同时在不同的内核上运行)。虚拟机的线程是否需要每个线程有多个实例?
现在,假设是GIL被删除不会每个线程(现在运行在不同的核心)需要一个单独的VM实例来执行? JVM是否有同样的问题?
如果是这样,在VM上解释/执行的程序中使用线程vs单独进程(除了使用POSIX线程vs进程的性能增益之外,还有什么好处 - 尽管我相信Linux的差别不在于那很棒)?因为必须为每个线程拥有一个单独的虚拟机实例,这似乎是一个很大的开销。
谢谢。
感谢您的回复。我认为你需要为每个线程分别创建一个VM实例,以便实际执行每个线程上运行的python/java代码(因为它们不在机器代码中,因此需要由VM和多条指令执行同时发生的无法同时运行在同一个虚拟机上) –
@Arash:嗯,由于更具动态性,Python比Java更有工作要做。即使Java仍然严格解释,解释可能发生在多个线程上。但是,大多数情况下,大多数Java代码实际上*都是直接运行的机器代码,它是从字节代码进行JIT编译的。 –
因此,执行所有解释的VM代码本身可以是多线程的,因此运行在由VM执行的不同线程中的代码正由执行实际VM的不同线程执行(希望这有意义)? –