你如何启动一个节点进程,以特定的 CPU 内核为目标?
我见过节点集群,但我有兴趣在不同的核心上启动两个不同的进程。
我假设从命令行启动节点时有一种方法可以做到这一点,即:
节点 myapp.js
如果有区别,我很想知道如何在 Windows 和 linux 中执行此操作。
你如何启动一个节点进程,以特定的 CPU 内核为目标?
我见过节点集群,但我有兴趣在不同的核心上启动两个不同的进程。
我假设从命令行启动节点时有一种方法可以做到这一点,即:
节点 myapp.js
如果有区别,我很想知道如何在 Windows 和 linux 中执行此操作。
一般来说,调度程序会在没有任何帮助的情况下完成这项工作。在野外,我只见过一种情况很重要......
我们在一个 8 核的机器上部署了一个节点服务,在负载测试期间,我们做了一个最奇怪的观察……该服务实际上在 7 个工作人员的情况下比在 8 个工作人员的情况下表现更好。稍后进行一些调试,我们发现所有的网络中断都是由核心 0 处理。我使用了 15 个工作人员,因此与其他核心相比,核心 0 将分担 1/2 的负载。最终,我认为我们最终选择了 7 名工人,因为它更简单、更可预测,而且复杂性不值得获得约 7% 的理论吞吐量。
话虽如此,要在 linux 上设置 CPU 亲和性:
$ taskset -pc 3089
pid 3089's current affinity list: 0,1
$ taskset -p 3089
pid 3089's current affinity mask: 3 # core 0 = 0x1, core 1 = 0x2
$ taskset -pc 1,2,3 3089
pid 3089's current affinity list: 0,1
pid 3089's new affinity list: 1