Wie viele Prozesse sollten gestartet werden?

Wie man die Anzahl der Prozesse einstellt

Die Anzahl der Prozesse wird durch die count-Eigenschaft bestimmt (Windows-Systeme unterstützen keine Einstellung der Prozessanzahl). Zum Beispiel der folgende Code:

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

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

// ## Starte 4 Prozesse, um Dienste anzubieten ##
$http_worker->count = 4;

...

Bei der Einstellung der Prozessanzahl sollten die folgenden Bedingungen berücksichtigt werden

  1. Anzahl der CPU-Kerne

  2. Größe des Arbeitsspeichers

  3. Ob die Anwendung mehr IO-intensiv oder CPU-intensiv ist

Grundsätze zur Einstellung der Prozessanzahl

  1. Die Summe des Speicherverbrauchs aller Prozesse muss kleiner sein als der Gesamtspeicher (im Allgemeinen benötigt jeder Arbeitsprozess etwa 40 MB Speicher).

  2. Wenn es sich um eine IO-intensive Anwendung handelt, das heißt, wenn einige blockierende IO-Operationen involviert sind, wie zum Beispiel der übliche Zugriff auf MySQL, Redis usw., die blockierend sind, kann die Anzahl der Prozesse höher eingestellt werden, zum Beispiel auf das 3-fache der CPU-Kernanzahl. Wenn in der Anwendung viel blockierendes Warten beteiligt ist, kann die Prozessanzahl weiter erhöht werden, zum Beispiel auf das 8-fache oder sogar mehr der CPU-Kernanzahl. Beachten Sie, dass nicht-blockierende IO als CPU-intensiv gilt und nicht als IO-intensiv.

  3. Wenn es sich um eine CPU-intensive Anwendung handelt, bei der keine blockierenden IO-Kosten anfallen, z.B. bei der Verwendung von asynchronem IO zum Lesen von Netzwerkressourcen, wo die Prozesse nicht durch den Anwendungscode blockiert werden, kann die Anzahl der Prozesse gleich der Anzahl der CPU-Kerne eingestellt werden.

Referenzwerte für die Einstellung der Prozessanzahl

Wenn der Anwendungscode mehr IO-intensiv ist, stellen Sie die Anzahl der Prozesse je nach IO-Intensität auf das 3- bis 8-fache der CPU-Kernanzahl ein.

Wenn der Anwendungscode mehr CPU-intensiv ist, kann die Anzahl der Prozesse auf die Anzahl der CPU-Kerne eingestellt werden.

Hinweis

Die IO von Workerman selbst ist nicht blockierend, zum Beispiel sind Connection->send usw. nicht blockierend und gehören zu CPU-intensiven Operationen. Wenn Sie sich nicht sicher sind, welcher Art von Anwendung Ihr Code angehört, können Sie die Anzahl der Prozesse auf etwa das 3-fache der CPU-Kernanzahl einstellen. Außerdem ist eine zu hohe Anzahl an Prozessen nicht immer von Vorteil; wenn zu viele Prozesse gestartet werden, erhöht sich der Aufwand für den Prozesswechsel, was sich negativ auf die Leistung auswirken kann.