在Node.js群集的documentation-page上有一些示例,其中工人被“生成”,如下所示:
// Start workers and listen for messages containing notifyRequest
const numCPUs = require('os').cpus().length;
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
这意味着每个CPU - 核心产生一个工人,对吗? 哪个CPU-Core是主? Node.js是单线程的,所以如果只有一个master,则至少有一个CPU上必须有2个进程 - Core,因为master必须在其中一个CPU-Cores上运行。我的假设是否正确?
答案 0 :(得分:1)
是的,例如,如果您有4个逻辑核心,主节点将与4个工作人员中的一个共享核心,这不是一件大事,因为主节点不应该处理任何重负载。
但是这里有一个catch os.cpus返回一定数量的逻辑核心,而不是物理的,如果你的应用程序受I / O限制,它仍然应该没问题但是对于繁重的计算任务,你可能应该考虑限制工作者的数量来代替物理核心(或使用另一个运行时)。
答案 1 :(得分:0)
希望这有助于How do multi core processors handle programs
检查第二段。它说的是像NodeJs这样的单CPU程序。
每个CPU核心都有预定数量的线程,例如a 双核CPU可能有4个线程(超线程), 意味着运行的任何给定程序将使用其分配的数量 指定核心上的CPU资源。 (确定资源分配 主要由系统本身,以及用户是否和 因此CPU已为工作负载分配资源。 CPU 线程和内核都以CPU的额定频率运行,即 每秒十亿次循环。时钟速度越快,速度越快 流程完成。具有更多内核的CPU可以分割其工作负载 更有效率。例如,一个运行速度为1.5 Ghz的8 Core处理器 如果进程使用全部8,则确实可以更快地完成进程 核心一次。但是,一个单线程程序(一个程序只使用 一个线程),如果说是2,则会占用更高的CPU优势 核心以3 Ghz运行。
如果两个程序打开,编程只使用1个CPU核心, 具有最高优先级的程序将被分配给核心0(核心 零是第一个核心)。任何其他开放的程序都将是 分配给将完成该过程的处理器核心 最快的。通常,计算机操作系统会 相对较好地将工作负载分配到多个核心, 不幸的是,有些程序只是为了利用而编程 一个核心。如果是这种情况,程序可能不需要 多个核心,与视频编辑程序或3D开发不同 程序
如果一次打开8个程序,并且他们都使用了 相当数量的CPU资源,在4核CPU上,1 计算机将比空闲时明显慢。每个过程 将给予分配的CPU资源量和每个程序 将相应地优先排序,并将指令存储在 CPU的缓存,但如果打开的程序使用100%的CPU 使用,并以最大频率运行,然后程序将 放慢速度,因为他们将被排在队列中并且相当长的延迟 在CPU完成其指令之前会暗示。注意,a 下载文件时可以看到类似的效果; 8同时 如果文件到达,则下载速度将低于2 下载速度限制。
希望这有助于,并作为一般的经验法则,基本的 应用程序,CPU速度比核心数更重要 一般来说,具有2个或更多内核的CPU非常适合 一般用途。