Node.js: дочерний процесс: соответствие процессору

1

Я хочу использовать функцию child_process.fork в Node.js, чтобы создать новый процесс. Этот пример также работает с функцией spawn.

Чтобы гарантировать, что эти дочерние процессы используют все ядра на машине равномерно, я хочу установить их близость к процессору, тем самым вынуждая их перейти на нужные ядра.

Я знаю, как это сделать на C и в терминале, но как бы это сделать в Node.js?

  • 0
    Это кажется мне плохой идеей; просто позвольте планировщику ОС делать свое дело. По крайней мере, попробуйте сравнить производительность всей системы с привязкой и без нее. (В зависимости от того, как работают ваши разветвленные процессы, вы можете попробовать вручную изменить сродство разветвленных пидов из терминала для проверки этого.)
  • 0
    @ josh3736, хм, это может быть.
Показать ещё 3 комментария
Теги:
cpu
fork
spawn

1 ответ

2
Лучший ответ

Я предоставлю это, сказав, что установка близости процессора к вашему процессу, вероятно, является плохим. Каждый процесс узла имеет несколько потоков (основной поток V8, который ваш JS работает в потоках libuv для выполнения ввода-вывода и других родных материалов), и ограничение процесса узла до одного ядра обязательно замедлит работу.

Ничего не делая и позволяя планировщику ОС иметь дело с вашими разветвленными процессами и их потоками, вероятно, даст лучшую производительность.

Разумеется, единственный способ узнать это - проверить систему под нагрузкой. Испытайте различные уровни нагрузки (свет, средний, высокий) и посмотрите, что лучше работает.


Я могу подумать о двух способах сближения процессов:

  1. Ужасно: используйте exec() для запуска taskset чтобы установить близость вашего процесса. (Используйте process.pid для текущего процесса или свойство pid ChildProcess возвращаемого из fork().)

  2. Лучше: напишите привязку к API платформы. (Как вы это сделаете в C.) Этот модуль, похоже, делает это; старый, поэтому он может работать или не работать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню