Сколько child_processes я должен fork () в node.js? - PullRequest
9 голосов
/ 06 ноября 2011

Мой вопрос довольно прост. хотя, это может потребовать ответа на другую переменную (я думаю)

Я играю с node.js и думаю о том, как использовать его в многоядерной архитектуре.

Последняя версия предоставляет child_process.fork() и child.spawn() методы для многопроцессного программирования. Я прочитал эту очень хорошую (но устаревшую) статью об использовании Node.js в качестве крупномасштабного сервера Comet. Теперь, когда nodejs обеспечивает многопроцессорное программирование, я действительно понятия не имею, сколько процессов мне нужно порождать для обслуживания большого количества запросов (при условии, что мой сервер работает только на одной машине). Есть ли способ выбрать «лучшее» (или хотя бы хорошее ) число дочерних процессов, выполняющих ту же работу?

Буду очень признателен за любую ссылку на руководство по началу работы.

Спасибо

Ответы [ 2 ]

10 голосов
/ 06 ноября 2011

В официальной документации Node.js есть пример использования кластера:

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('death', function(worker) {
    console.log('worker ' + worker.pid + ' died');
  });
} else {
  // Worker processes have a http server.
  http.Server(function(req, res) {
    res.writeHead(200);
    res.end("hello world\n");
  }).listen(8000);
}

Как видно из приведенного выше кода, вы должны использовать столько вилок, сколько у вас есть числа процессоровчтобы все ядра работали одновременно (распределите работу между ядрами вашего процессора).

5 голосов
/ 29 августа 2013

В примере Node.js они хотят, чтобы каждое ядро ​​запускало только один процесс. Не существует технических ограничений на количество рабочих мест на ядро, поэтому вы можете запускать столько, сколько сможете, до тех пор, пока ваша система может справиться.

Однако запуск более одного процесса на ядро ​​ не улучшает производительность приложения.

надеюсь, это поможет!

...