这个单一的 Node.JS 应用程序使用多核吗?

Nyx*_*nyx 6 javascript ubuntu multiprocessing node.js

在 Ubuntu 18.04 系统上,仅运行 1 个摄取数据馈送的 Node.js 脚本,htop显示两个 CPU 内核都被利用。

运行 1 个节点脚本: 在此处输入图片说明

没有运行 node.js 脚本: 在此处输入图片说明

这个 Node.js 脚本有多个事件侦听器,用于接收数据、进行一些数据处理并将它们发送到远程数据库服务器。

foo.on('msg', msg => { setImmediate(() => do_work(msg)) } );
Run Code Online (Sandbox Code Playgroud)

问题:尽管 Node.js 是单线程的,但为什么看起来好像两个 CPU 内核都被 Node 同等利用?观察到的 CPU 负载分配为 60%/40% 和 50%/50%

它实际上使用了两个 CPU 内核吗?或者只是一直在它们之间快速切换,但在任何时候都只真正使用 1 个内核?换句话说,当 CPU 工作负载高于 1 个内核但低于 2 个内核时,这种情况将导致系统窒息。

基本上,我想知道单核系统是否足以应付这种工作负载。谢谢!

Ber*_*rgi 6

即使在任何给定时间只有一个 JS 函数(每个环境)1会在一个内核上执行,但这并不意味着

1:你提到你只运行一个脚本,这意味着只有一个 JS 对象领域。node.js 应用程序在多个线程上运行的另一种可能性是产生workers,每个都有自己的 JS 环境并通过事件进行通信。