Node.js 子进程分叉:CPU 亲和力

Node.js child process fork: CPU affinity

我想使用 Node.js 中的 child_process.fork 函数来生成一个新进程。此示例也适用于 spawn 函数。

为了确保这些子进程均匀地利用机器上的所有内核,我想设置它们的 CPU 亲和力,从而迫使它们迁移到所需的内核。

我知道如何在 C 和终端中执行此操作,但我如何在 Node.js 中执行此操作?

我首先要说的是,设置进程的处理器亲和性可能不是一个好主意。每个节点进程都有许多线程(你的 JS 运行 所在的主 V8 线程加上用于执行 I/O 和其他本机内容的 libuv 线程),并且将节点进程限制为单个内核必然会放慢速度。

什么也不做,让 OS 调度程序处理您的分叉进程及其线程可能会产生更好的性能。

当然,真正了解的唯一方法是在负载下对系统进行基准测试。测试不同级别的负载(轻、中、高),看看哪个性能更好。


我可以想到两种设置进程关联的方法:

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

  2. 更好的方法:编写到平台的本机绑定 API。 (你如何在 C 中做到这一点。)This module 似乎是这样做的;是旧的,所以它可能会或可能不会。