我注意到当我使用cruby通过Open3.capture3('java -jar multi-threaded.jar')
运行多线程java程序时,大多数java线程都处于空闲状态,CPU只忙于单个核心。但是,如果我从bash运行相同的javaprogram,则CPU的利用率接近100%。
cruby GIL对capture3
运行的程序有影响吗?
答案 0 :(得分:1)
没有。首先,YARV Giant VM Lock(GVL)仅防止多个 Ruby 线程同时进入字节码解释器。在YARV中,Open3::capture3
是用C语言编写的,而不是Ruby语言,因此GVL甚至不适用。
其次,Java进程不是一个线程,它是一个完全独立的进程。它并不关心YARV的线程实现是什么,因为它是一个进程,而不是一个线程。