Quantos processos devem ser iniciados
Como definir o número de processos
O número de processos é determinado pela propriedade count (sistemas Windows não suportam a configuração do número de processos), por exemplo, o código abaixo
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$http_worker = new Worker("http://0.0.0.0:2345");
// ## Inicia 4 processos para fornecer serviços ##
$http_worker->count = 4;
...
Fatores a considerar na configuração do número de processos
-
Número de núcleos de CPU
-
Tamanho da memória
-
A natureza do negócio, se é mais voltado para operações intensivas em IO ou CPU
Princípios para a configuração do número de processos
-
A soma da memória ocupada por cada processo deve ser menor que a memória total (geralmente, cada processo de negócios ocupa cerca de 40M de memória)
-
Se for intensivo em IO, ou seja, se o negócio envolver operações de bloqueio IO, como acessos típicos ao Mysql, Redis e outros armazenamentos que são acessos bloqueantes, o número de processos pode ser aumentado, configurando-o para 3 vezes o número de núcleos da CPU. Se o negócio envolver muitas esperas bloqueadas, o número de processos pode ser incrementado adequadamente, como 8 vezes o número de núcleos da CPU ou até mais. Note que IO não bloqueante é considerado intensivo em CPU e não em IO.
-
Se for intensivo em CPU, ou seja, se não houver sobrecarga de bloqueio IO no negócio, como o uso de IO assíncrono para ler recursos de rede, onde o processo não é bloqueado pelo código de negócios, pode-se definir o número de processos igual ao número de núcleos de CPU.
Valores de referência para configuração do número de processos
Se o código de negócios for mais voltado para operações intensivas em IO, defina o número de processos com base na intensidade do IO, como 3 a 8 vezes o número de núcleos da CPU.
Se o código de negócios for mais orientado para operações intensivas em CPU, o número de processos pode ser configurado igual ao número de núcleos da CPU.
Atenção
O IO do Workerman é não bloqueante, por exemplo, Connection->send e outros são operações não bloqueantes, que pertencem à operação intensiva em CPU. Se você não tiver certeza sobre o tipo de seu negócio, pode definir o número de processos para cerca de 3 vezes o número de núcleos da CPU. Além disso, ter mais processos não é necessariamente melhor; se houver muitos processos, o custo da troca de processos aumentará, o que pode impactar o desempenho.