ruby GIL 对其启动的进程有影响吗?
Does the ruby GIL have effect on the processes it starts?
我注意到,当我通过 Open3.capture3('java -jar multi-threaded.jar')
使用 cruby 运行 多线程 java 程序时,大多数 java 线程处于空闲状态并且 CPU 只在一个核心上忙。但是,如果我 运行 来自 bash 的相同 java 程序,CPU 的利用率接近 100%。
cruby GIL 对 capture3
的程序 运行 有影响吗?
没有。首先,YARV 巨型 VM 锁 (GVL) 仅防止多个 Ruby 线程同时进入字节码解释器。在 YARV 中,Open3::capture3
是用 C 编写的,而不是 Ruby,因此 GVL 甚至不适用。
其次,Java 进程不是线程,它是一个完全独立的进程。它一点也不关心 YARV 的线程实现是做什么的,因为它是一个进程,而不是一个线程。
我注意到,当我通过 Open3.capture3('java -jar multi-threaded.jar')
使用 cruby 运行 多线程 java 程序时,大多数 java 线程处于空闲状态并且 CPU 只在一个核心上忙。但是,如果我 运行 来自 bash 的相同 java 程序,CPU 的利用率接近 100%。
cruby GIL 对 capture3
的程序 运行 有影响吗?
没有。首先,YARV 巨型 VM 锁 (GVL) 仅防止多个 Ruby 线程同时进入字节码解释器。在 YARV 中,Open3::capture3
是用 C 编写的,而不是 Ruby,因此 GVL 甚至不适用。
其次,Java 进程不是线程,它是一个完全独立的进程。它一点也不关心 YARV 的线程实现是做什么的,因为它是一个进程,而不是一个线程。