Node.js子进程fork:CPU亲和力

问题描述:

我想在Node.js中使用child_process.fork函数来产生一个新进程。该示例也适用于spawn函数。Node.js子进程fork:CPU亲和力

为了确保这些子进程均匀利用机器上的所有内核,我希望设置它们的CPU关联性,从而迫使它们迁移到期望的内核。

我知道如何在C和终端中做到这一点,但我怎么会在Node.js中做到这一点?

+0

这让我觉得不好主意;让操作系统调度程序做它的事情。至少试着对整个系统的性能进行基准测试,不管有没有亲和力。 (根据您的分叉过程如何工作,您可以尝试手动更改终端中分叉pid的亲和性,以用于测试此目的。) – josh3736

+0

@ josh3736,嗯,它可能是。 –

+0

@ josh3736,好主意。你如何得到过程的PID? –

我将在此前言说,设置处理器对处理器的亲和力可能是一个坏主意。每个节点进程都有一些线程(JS运行的主要V8线程以及用于执行I/O和其他本地内容的libuv线程),并且将节点进程限制为单个内核将会降低速度。

无所事事,让操作系统调度程序处理您的分叉进程及其线程可能会产生更好的性能。

当然,真正知道的唯一方法是在负载下对系统进行基准测试。测试不同的负载水平(光,中,高),看看哪些性能更​​好。


我能想到的设置过程亲和力的方式有两种:

  1. 丑:使用exec()运行taskset设置你的进程亲和力。 (使用process.pid当前进程,或从fork()返回ChildProcesspid property。)

  2. 更好的方式:写一本机绑定到平台API。 (你怎么用C做)This module似乎这么做;是旧的,所以它可能会或可能不会工作。