背景
Linux 有一套 CPU 调度策略。多个进程同时处于内存,当一个进程 wait,os 会拿走 cpu 使用权先给其它进程使用。
对于多核系统,不做特殊设置,程序进程是不会和某个 cpu 关联,而是服从 os 调配。这就造成了一个问题,来回切换 cpu,会产生大量上下文切换,影响性能。
taskset 命令
通过 taskset 可以将进程绑定到特定的 cpu 上运行,从而避免 cpu 切换带来的消耗,提高性能。
示例,更多参考taskset 命令 – 设置或检索进程的 CPU 相关性
1 | 将 cpu0 和 cpu1 分配给 PID 为 1234 的进程 |
nodejs 中如何绑定 CPU?
两种方法:
- 调用 c++扩展:使用相关 API-
int sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask)
- 调用
taskset
命令:使用execa.js
或者child_process.exec系列
执行taskset
命令
没找到 node 提供相关接口,只能通过这种「胶水」的方式来调用。