Heim >Backend-Entwicklung >PHP-Tutorial >socket - PHP-Multithreading, Multiprozess verwenden? ?

socket - PHP-Multithreading, Multiprozess verwenden? ?

WBOY
WBOYOriginal
2016-09-21 14:13:141433Durchsuche

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 🎜>

socket - PHP-Multithreading, Multiprozess verwenden? ?

socket - PHP-Multithreading, Multiprozess verwenden? ?

socket - PHP-Multithreading, Multiprozess verwenden? ?

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:

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? ?

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:

socket - PHP-Multithreading, Multiprozess verwenden? ?

socket - PHP-Multithreading, Multiprozess verwenden? ?

socket - PHP-Multithreading, Multiprozess verwenden? ?

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描述符

Das Funktionsprinzip eines typischen Multiprozess-HTTP-Servers ist ungefähr so: Ein Prozess ist dafür verantwortlich, auf Verbindungen an Port 80 zu warten. Wenn die Verbindung eintrifft, wird der entsprechende Deskriptor vom Kernel erstellt und dann vom Prozess gefunden ein relativ untätiger

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. 子进程

Die Funktionsprinzipien von Multithread-HTTP-Servern sind tatsächlich ähnlich. Die Änderung des oben genannten

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn