node.js – 在内部生成用户级进程线程?

问题描述

我注意到在生成一个非常简单的节点进程时,htop显示多个(我今天学到的称为)userland process threads

echo "setInterval(() => console.log('? ?'),1000);" > test.js
node test.js
# while node is running,somewhere else:
htop

enter image description here

我现在在 htop 中看到的,按脚本名称过滤:

  • 主进程(以白色表示,cpu 时间很少但会增加
  • 一些(~5 或 6,取决于机器?!)绿线,表示用户态进程线程。其中一些似乎会占用一点 cpu 时间。
  • 奇怪的是,这只发生在我的 linux 机器上(在两台仿生和 xenial ubuntu 上测试)。在 MacOS 上,它只显示一个进程。 这可能与 htop 版本不匹配有关……

大多数围绕节点和线程的搜索结果都在谈论 worker threads,但我不认为它们涉及这里。即使在没有这种东西的节点 v8 上,行为也是类似的(而且,我没有创建它们,甚至没有导入 worker_threads 模块)。

this onethis one 之类的答案讨论了内部线程池。但是数字不匹配(据说,应该只有 4 个额外的线程),并且在 MacOS 上看不到它们对我来说也没有意义,并且在没有任何 I/O 时首先创建它们的节点看起来也很奇怪。

我的问题

  • 我是否正确地假设这些线程与工作线程无关?
  • 这些线程的目的是什么?它们确实属于内部线程池吗?
  • 如果有,为什么我会得到超过 4 个(没有设置 UV_THREADPOOL_SIZE)?在 MacOS 上没有?

版本:

  • Ubuntu 16 和 18 LTS
  • MacOS 11.2,包括 m1 和英特尔芯片
  • Node 8 和 14(在所有操作系统上测试了两个版本,结果保持不变)
  • htop 2.1(在 Linux 上)和 3.0(在 MacOS 上)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)