Cuántos procesos deberían activarse
Cómo configurar el número de procesos
El número de procesos se determina por la propiedad count (la configuración del número de procesos no es compatible con sistemas Windows), por ejemplo, el siguiente código:
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$http_worker = new Worker("http://0.0.0.0:2345");
// ## Iniciar 4 procesos para proporcionar servicios ##
$http_worker->count = 4;
...
Factores a considerar al configurar el número de procesos
-
Número de núcleos de la CPU
-
Tamaño de la memoria
-
Si el negocio tiende a ser más intensivo en IO o intensivo en CPU
Principios para la configuración del número de procesos
-
La suma del uso de memoria por proceso debe ser menor que la memoria total (en general, cada proceso de negocio utiliza aproximadamente 40M de memoria).
-
Si es intensivo en IO, es decir, si el negocio involucra algunas operaciones de IO bloqueantes, como el acceso habitual a Mysql, Redis y otros almacenes que son accesos bloqueantes, se puede aumentar el número de procesos, configurándolo hasta 3 veces el número de núcleos de CPU. Si hay muchas esperas bloqueantes en el negocio, se puede aumentar aún más el número de procesos, por ejemplo, 8 veces el número de núcleos de CPU o incluso más. Nota que el IO no bloqueante es considerado intensivo en CPU, y no pertenece al grupo de IO intensivo.
-
Si es intensivo en CPU, es decir, si el negocio no tiene costos de IO bloqueante, como al utilizar IO asíncrono para leer recursos de la red, en este caso el proceso no será bloqueado por el código de negocio, se puede configurar el número de procesos igual al número de núcleos de CPU.
Valores de referencia para la configuración del número de procesos
Si el código de negocio tiende a ser intensivo en IO, se debe ajustar el número de procesos de acuerdo con el grado de intensidad en IO, por ejemplo, de 3 a 8 veces el número de núcleos de CPU.
Si el código de negocio tiende a ser intensivo en CPU, se puede establecer el número de procesos igual al número de núcleos de CPU.
Nota
El IO de Workerman es no bloqueante en sí mismo, por ejemplo, Connection->send y otros son no bloqueantes, perteneciendo a operaciones intensivas en CPU. Si no está seguro del tipo de negocio que tiene, puede establecer el número de procesos en aproximadamente 3 veces el número de núcleos de CPU. Además, tener más procesos no siempre es mejor; si se inician demasiados procesos, el costo de cambio de contexto aumentará, lo que afectará el rendimiento en cierta medida.