Я хочу использовать функцию child_process.fork
в Node.js, чтобы создать новый процесс. Этот пример также работает с функцией spawn
.
Чтобы гарантировать, что эти дочерние процессы используют все ядра на машине равномерно, я хочу установить их близость к процессору, тем самым вынуждая их перейти на нужные ядра.
Я знаю, как это сделать на C и в терминале, но как бы это сделать в Node.js?
Я предоставлю это, сказав, что установка близости процессора к вашему процессу, вероятно, является плохим. Каждый процесс узла имеет несколько потоков (основной поток V8, который ваш JS работает в потоках libuv для выполнения ввода-вывода и других родных материалов), и ограничение процесса узла до одного ядра обязательно замедлит работу.
Ничего не делая и позволяя планировщику ОС иметь дело с вашими разветвленными процессами и их потоками, вероятно, даст лучшую производительность.
Разумеется, единственный способ узнать это - проверить систему под нагрузкой. Испытайте различные уровни нагрузки (свет, средний, высокий) и посмотрите, что лучше работает.
Я могу подумать о двух способах сближения процессов:
Ужасно: используйте exec()
для запуска taskset
чтобы установить близость вашего процесса. (Используйте process.pid
для текущего процесса или свойство pid
ChildProcess
возвращаемого из fork()
.)
Лучше: напишите привязку к API платформы. (Как вы это сделаете в C.) Этот модуль, похоже, делает это; старый, поэтому он может работать или не работать.