Сколько процессов следует запустить

Установка количества процессов

Количество процессов устанавливается с помощью свойства count (для системы Windows установка количества процессов не поддерживается), например:

use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

$http_worker = new Worker("http://0.0.0.0:2345");

// ## Запуск 4 процессов для обеспечения обслуживания внешних запросов ##
$http_worker->count = 4;

...

При установке количества процессов следует учитывать следующие условия

  1. Количество ядер центрального процессора (CPU).
  2. Объем оперативной памяти.
  3. Особенности бизнес-процессов: являются ли они напряженными вводом-выводом (I/O) или требуют вычислительной мощности процессора.

Принцип установки количества процессов

  1. Суммарный объем памяти, занимаемый каждым процессом, должен быть меньше общего объема доступной памяти (обычно каждый бизнес-процесс занимает около 40 Мб памяти).
  2. Для процессов, требующих интенсивную работу с вводом-выводом (I/O), например, при обращении к блокировочным хранилищам данных, таким как MySQL, Redis и прочим, количество процессов можно увеличить, например, на 3 раза больше, чем количество ядер CPU. Если необходимо обрабатывать большое количество блокировок и задержек, то количество процессов можно увеличить еще больше, например, в 8 раз или даже больше, чем количество ядер CPU. Стоит отметить, что операции ввода-вывода, не являющиеся блокирующими, относятся к вычислительно-интенсивной нагрузке процессора.
  3. Для процессов, требующих интенсивную работу с ЦПУ, например, при использовании асинхронных операций ввода-вывода для чтения данных из сети, если бизнес-процесс не блокирует работу процесса, можно установить количество процессов равным количеству ядер ЦПУ.

Рекомендуемые значения количества процессов

Если бизнес-код имеет напряженный ввод-вывод, то количество процессов должно быть установлено в зависимости от степени интенсивности ввода-вывода, например, в 3-8 раз больше, чем количество ядер ЦПУ.

Если бизнес-код требует интенсивной работы ЦПУ, то количество процессов можно установить равным количеству ядер ЦПУ.

Важно

Workerman сам по себе выполняет операции ввода-вывода неблокирующим способом, например, метод Connection->send является неблокирующим, что относится к операциям, интенсивно использующим ЦПУ. Если не уверены, на какой тип нагрузки ориентирован ваш бизнес-процесс, установите количество процессов примерно в 3 раза больше количества ядер ЦПУ.
Кроме того, большое количество процессов не всегда означает лучшую производительность, так как увеличивается накладные расходы на переключение процессов, что может отрицательно сказаться на производительности.