我想在Node.js中使用child_process.fork
函数来生成一个新进程。此示例也适用于spawn
函数。
为了确保这些子进程均匀地利用计算机上的所有核心,我想设置它们的CPU亲和力,从而迫使它们迁移到所需的核心。
我知道如何在C和终端中执行此操作,但我如何在Node.js中执行此操作?
答案 0 :(得分:2)
我首先要说的是,设置处理器与处理器的亲和力可能是一个坏主意。每个节点进程都有许多线程(JS运行的主要V8线程以及用于执行I / O和其他本机操作的libuv线程),并且将节点进程限制为单个核心必然会减慢速度。
什么都不做,让操作系统调度程序处理你的分叉进程及其线程可能会产生更好的性能。
当然,真正了解的唯一方法是在负载下对系统进行基准测试。测试不同级别的负载(轻,中,高),看看哪些表现更好。
我可以想到两种设置流程亲和力的方法:
丑陋:使用exec()
运行taskset
来设置您的流程'亲和力。 (使用process.pid
表示当前流程,或ChildProcess
fork()
从{{1}}返回。)
更好的方法:将本机绑定写入平台API。 (你如何在C中这样做。)pid
property似乎是这样做的;已经老了所以它可能会也可能不会起作用。