【发布时间】:2018-12-26 12:32:31
【问题描述】:
正如标题所说,为什么一个 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 时,它会产生两个线程。
【问题讨论】:
-
我假设“CRuby”是指 YARV,因为它是唯一一个发布编号为 2.3.8、2.5.3 或 2.6.0 的版本。 (CRuby 的描述性不是很好,因为例如 MRI、YARV、MRuby 和 tinyrb 是用 C 编写的。)有趣的是,在 macOS 10.13 上使用 YARV 2.6.0,我得到了 2 个不带 JIT 的线程和 3 个带 JIT 的线程。 MacOS 的
ps没有nlwp关键字,所以我假设您使用不同的操作系统,也许这会起作用。
标签: ruby virtual-machine interpreter