Wie viele Prozesse sollten gestartet werden
Festlegung der Prozessanzahl
Die Anzahl der Prozesse wird durch das Attribut count
bestimmt (Windows-Systeme unterstützen keine Prozessanzahl), wie im folgenden Code dargestellt:
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$http_worker = new Worker("http://0.0.0.0:2345");
// ## Starten von 4 Prozessen für den externen Service ##
$http_worker->count = 4;
...
Bei der Festlegung der Prozessanzahl sind folgende Punkte zu berücksichtigen
- Anzahl der CPU-Kerne
- Größe des Arbeitsspeichers
- Neigung des Geschäfts zur IO-Intensität oder CPU-Intensität
Grundsätze für die Festlegung der Prozessanzahl
- Die Gesamtsumme des von jedem Prozess belegten Speichers sollte kleiner sein als der Gesamtspeicher (normalerweise beträgt der Speicherbedarf pro Geschäftsprozess etwa 40 MB)
- Bei IO-intensiven Geschäften, d.h. Geschäfte, die einige blockierende IO-Vorgänge beinhalten, wie z.B. der Zugriff auf Speicher wie Mysql, Redis usw., die blockierende Vorgänge sind, kann die Anzahl der Prozesse erhöht werden, beispielsweise auf das 3-fache der Anzahl der CPU-Kerne. Wenn das Geschäft viele blockierende Wartezeiten beinhaltet, kann die Anzahl der Prozesse angemessen erhöht werden, z.B. das 8-fache oder sogar mehr der Anzahl der CPU-Kerne. Beachten Sie, dass nicht blockierende IO zu den CPU-intensiven Geschäften gehört und nicht zu den IO-intensiven Geschäften.
- Für CPU-intensive Geschäfte, d.h. Geschäfte, die keine blockierenden IO-Kosten haben, wie z.B. das asynchrone Lesen von Netzwerkressourcen, bei dem die Prozesse nicht durch den Geschäftscode blockiert werden, kann die Anzahl der Prozesse auf die Anzahl der CPU-Kerne festgelegt werden.
Richtwerte für die Festlegung der Prozessanzahl
Wenn der Geschäftscode zur IO-Intensität neigt, sollte die Anzahl der Prozesse entsprechend der Intensität der IO festgelegt werden, z.B. das 3- bis 8-fache der Anzahl der CPU-Kerne.
Wenn der Geschäftscode zur CPU-Intensität neigt, kann die Anzahl der Prozesse auf die Anzahl der CPU-Kerne festgelegt werden.
Beachten Sie
Das IO von Workerman selbst ist nicht blockierend, z.B. Connection->send
ist nicht blockierend und gehört zu den CPU-intensiven Operationen. Wenn Sie sich nicht sicher sind, ob Ihr Geschäft zur IO- oder zur CPU-Intensität neigt, können Sie die Anzahl der Prozesse auf etwa das 3-fache der Anzahl der CPU-Kerne festlegen. Darüber hinaus gilt, dass eine höhere Anzahl von Prozessen nicht unbedingt besser ist, denn zu viele Prozesse erhöhen die Umschaltkosten und beeinträchtigen die Leistung.