问题描述
我注意到在生成一个非常简单的节点进程时,htop
会显示多个(我今天学到的称为)userland process threads。
echo "setInterval(() => console.log('? ?'),1000);" > test.js
node test.js
# while node is running,somewhere else:
htop
我现在在 htop 中看到的,按脚本名称过滤:
- 主进程(以白色表示,cpu 时间很少但会增加)
- 一些(~5 或 6,取决于机器?!)绿线,表示用户态进程线程。其中一些似乎会占用一点 cpu 时间。
- 奇怪的是,这只发生在我的 linux 机器上(在两台仿生和 xenial ubuntu 上测试)。在 MacOS 上,它只显示一个进程。 这可能与 htop 版本不匹配有关……
大多数围绕节点和线程的搜索结果都在谈论 worker threads,但我不认为它们涉及这里。即使在没有这种东西的节点 v8 上,行为也是类似的(而且,我没有创建它们,甚至没有导入 worker_threads
模块)。
this one 和 this 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 (将#修改为@)