Heim >Backend-Entwicklung >PHP-Tutorial >socket - PHP-Multithreading, Multiprozess verwenden? ?
I. Wie ist die Verwendung von PHP-Multiprozessen? ? (wird von den meisten PHP-Programmen verwendet | fast nie verwendet)
II. Was ist die Verwendung von PHP-Multithreading? ? (wird von den meisten PHP-Programmen verwendet | fast nie verwendet)
III. Wie vergleichen sich PHP-Multiprozess und PHP-Multithread mit Java? ? (einfach schrecklich | nicht einmal annähernd)
Im Internet steht fast, dass PHP nicht für Multithreading geeignet ist (ist es auch nicht für Multiprozess geeignet? Bedeutet das, dass es nicht erforderlich ist, PHP-bezogene Funktionen wie Multi zu verstehen). -Threading und Multiprozess? ?
Aufgrund persönlicher Vorlieben möchte ich jetzt ein Web-Chat-Tool erstellen, das QQ ähnelt. Jetzt verstehe ich grundsätzlich die Socket-Kommunikation, habe aber etwas über Open-Source-Kommunikations-Frameworks wie Workerman gelernt 🎜>
I. Kann PHP Multi-Process die Vorteile einer Multi-Core-CPU nutzen, die Leistung verbessern und eine hohe Parallelität unterstützen? ?
II. Ein einzelner PHP-Prozess kann Tausende oder sogar Zehntausende gleichzeitiger Verbindungen unterstützen, und mehrere Prozesse können Hunderttausende oder sogar Millionen gleichzeitiger Verbindungen unterstützen. Wie ist dieser Satz zu verstehen? ? Da für die Kommunikation Sockets verwendet werden, ist die Anzahl der Ports tatsächlich festgelegt und wird 65536 nicht überschreiten. Ein Port stellt ein Paar von Verbindungen dar. Die hier genannten Tausender – „Zehntausende“ sind möglicherweise besser, Hunderttausende oder Millionen mit mehreren Prozessen. sind sie so mächtig? ?
Antwortinhalt:
II. Was ist die Verwendung von PHP-Multithreading? ? (wird von den meisten PHP-Programmen verwendet | fast nie verwendet)
III. Wie vergleichen sich PHP-Multiprozess und PHP-Multithread mit Java? ? (einfach schrecklich | nicht einmal annähernd)
Im Internet steht fast, dass PHP nicht für Multithreading geeignet ist (ist es auch nicht für Multiprozess geeignet? Bedeutet das, dass es nicht erforderlich ist, PHP-bezogene Funktionen wie Multi zu verstehen). -Threading und Multiprozess? ?
Vor kurzem möchte ich aufgrund persönlicher Vorlieben ein Web-Chat-Tool erstellen, das QQ ähnelt. Jetzt verstehe ich grundsätzlich die Socket-Kommunikation, habe aber etwas über Open-Source-Kommunikations-Frameworks wie Workerman gelernt. Seine Funktionseinführung umfasst Folgendes:
I. Kann PHP Multi-Process die Vorteile einer Multi-Core-CPU nutzen, die Leistung verbessern und eine hohe Parallelität unterstützen? ?
II. Ein einzelner PHP-Prozess kann Tausende oder sogar Zehntausende gleichzeitiger Verbindungen unterstützen, und mehrere Prozesse können Hunderttausende oder sogar Millionen gleichzeitiger Verbindungen unterstützen. Wie ist dieser Satz zu verstehen? ? Da für die Kommunikation Sockets verwendet werden, ist die Anzahl der Ports tatsächlich festgelegt und wird 65536 nicht überschreiten. Ein Port stellt ein Paar von Verbindungen dar. Die hier genannten Tausender – „Zehntausende“ sind möglicherweise besser, Multiprozess Sind die Hunderttausende oder Millionen von Wetten so mächtig? ?
Korrigieren Sie ein Konzept: Die Gesamtzahl der Ports ist ein vorzeichenloser Kurzschluss, nämlich 65535. Dies bedeutet nicht, dass ein Server nur eine begrenzte Anzahl von Verbindungen unterstützen kann! Ein Port entspricht einem Prozess, und die Anzahl der Verbindungen eines Prozesses stimmt mit der Anzahl der vom Prozess geöffneten
s überein. Die Anzahl der Deskriptoren liegt in der Größenordnung von 32-Bit-Int. Natürlich hat das System eine Begrenzung der maximalen Deskriptoren eines Prozesses, die über Kernel-Parameter konfiguriert werden können, aber Hunderttausende sind definitiv kein Problem. socket描述符
Um diesen Deskriptor zu verarbeiten, das heißt, Daten auf diesem Deskriptor zu lesen und zu schreiben. Beachten Sie, dass dies 子进程
ist. Aufgrund des untergeordneten Prozesses können Deskriptoren zwischen übergeordneten und untergeordneten Prozessen übergeben werden. Wenn die Anzahl der Zugriffe zunimmt und die Anzahl der untergeordneten Prozesse nicht ausreicht, kann der übergeordnete Prozess neue untergeordnete Prozesse erstellen, um Deskriptoren entsprechend zu verarbeiten. Der übergeordnete Prozess sollte bis zu einem gewissen Grad eine einfache Lastausgleichsstrategie implementieren. 子进程
in 进程
kann dasselbe erklären. 线程
Die obige Erklärung hat nichts mit PHP zu tun. PHP kapselt lediglich diese zugrunde liegenden Konzepte und Systemaufrufe. Die meisten Leute verwenden PHP, das auf dem PHP-Skriptinterpreter basiert. Und workerman
sollte ein http-Dienst sein, der auf Basis von PHP-gekapselten Systemaufrufen implementiert wird.
Der PHP-Prozess wird von php-fpm (Implementierung von fastcgi) verwaltet: Der Master-Prozess verteilt Anfragen an untergeordnete Prozesse
Masterprozess: Dienst kommuniziert mit Webserver
Kommunikationsimplementierungsmethode 1: HTTP-Socket (Host-Port) belegt einen Port, das bedeutet, dass PHP-FPM hier nur einen Port belegt
Kommunikationsimplementierungsmethode zwei: Unix-Domänen-Socket (Interprozesskommunikation), die auf einer .sock-Datei basiert und nicht auf Netzwerkprotokollen basiert, sodass sie theoretisch keine Ports belegt
Pool-Prozess: untergeordneter Prozess, einschließlich Parser, Parsing-Skript