正如标题所述,为什么Ruby程序或进程产生多个线程?
例如,如果我运行了一个简单的程序,例如:
ruby -e 'while true; end'
,然后通过运行以下命令来计算该程序正在使用的线程数:
ps -o nlwp `echo $(ps aux | pgrep ruby)`
我得到输出:
NLWP
2
这意味着该进程正在使用两个线程。
我在Linux上使用CRuby / YARV 2.5.3。我也在2.3.8中进行了尝试,并得到了相同的结果。
修改
在Ruby 2.6.0中,似乎只运行一个线程。但是,当我使用--jit
选项启用JIT时,它将产生两个线程。
答案 0 :(得分:4)
您没有说您正在使用哪个Ruby实现,因此我们只能猜测:
也许还有很多其他原因。
例如,YARV 2.6在不使用JIT运行时将使用2个线程(引擎和I / O),而在使用JIT运行时将使用3个线程(加上JIT)。
答案 1 :(得分:3)
在您数过的两个之中,一个进程确实是运行中的ruby进程。另一个是您的grep ruby
。