Heim PHP-Framework Workerman Mehrere Konzepte, die Sie in Workerman kennen müssen

Mehrere Konzepte, die Sie in Workerman kennen müssen

Nov 26, 2019 pm 03:55 PM
workerman

Die folgende Spalte des Tutorials zur Workerman-Nutzung stellt Ihnen einige Konzepte vor, die Sie über Workerman wissen müssen. Ich hoffe, dass es für Freunde in Not hilfreich sein wird!

Mehrere Konzepte, die Sie in Workerman kennen müssen

Workerman ist ein Open-Source-Hochleistungs-PHP-Socket-Service-Framework, das rein in PHP entwickelt wurde. Es handelt sich nicht um ein MVC-Framework, sondern um ein allgemeineres Socket-Service-Framework auf niedrigerer Ebene. Sie können es zum Entwickeln von TCP-Agenten, Ladder-Agenten, Spieleservern, Mailservern und FTP-Servern verwenden.

Empfohlen: Workerman-Tutorial

Tatsächlich ähnelt Workerman einer PHP-Version von Nginx, und der Kern besteht ebenfalls aus Multiprozess + Epoll + nicht blockierendem IO . Jeder Workerman-Prozess kann Zehntausende gleichzeitiger Verbindungen aufrechterhalten. Da es sich im Speicher befindet, ist es nicht auf Container wie Apache, Nginx und PHP-FPM angewiesen und verfügt über eine extrem hohe Leistung.

Unterstützt TCP, UDP, UNIXSOCKET, lange Verbindungen, Websocket, HTTP, WSS, HTTPS und andere Kommunikationsprotokolle sowie verschiedene benutzerdefinierte Protokolle. Es verfügt über viele leistungsstarke Komponenten wie Timer, asynchrone Socket-Clients, asynchrones MySQL, asynchrones Redis, asynchrones HTTP und asynchrone Nachrichtenwarteschlangen.

Zunächst müssen Sie einige Kernkonzepte verstehen: 1. Multiprozess 2. Epoll 3. Nicht blockierendes IO

1. Multiprozess:

Was ist ein Prozess? Ein Prozess umfasst Code, Daten und Ressourcen (Speicher), die dem Prozess zugewiesen sind. Intuitiv gesehen ist ein Prozess eine PID in einem Computersystem . Das Betriebssystem schützt den Prozessraum vor Störungen durch externe Prozesse, d. h. ein Prozess kann nicht auf den Speicher eines anderen Prozesses zugreifen.

Manchmal besteht die Notwendigkeit, zwischen Prozessen zu kommunizieren. In diesem Fall kann das Betriebssystem verwendet werden, um einen Mechanismus für die Kommunikation zwischen Prozessen bereitzustellen. Wenn Sie eine ausführbare Datei ausführen, erstellt das Betriebssystem normalerweise einen Prozess für die Ausführung.

Wenn die Ausführungsdatei jedoch auf einem Multiprozessdesign basiert, erstellt das Betriebssystem mehrere Prozesse auf dem ursprünglichen Prozess. Der zwischen diesen Prozessen ausgeführte Code ist derselbe, die Ausführungsergebnisse können jedoch gleich sein . Es kann anders sein.

Warum brauchen wir mehrere Prozesse? Die intuitivste Idee ist, dass, wenn das Betriebssystem Multi-Core unterstützt, eine ausführbare Datei auf verschiedenen Kernen ausgeführt werden kann, auch wenn sie kein Multi-Core ist, während ein Prozess auf E/A-Vorgänge wartet, ein anderer Der Prozess kann auch auf der CPU ausgeführt werden, um die CPU-Auslastung und die Programmeffizienz zu verbessern.

Auf Linux-Systemen können Sie fork() verwenden, um einen untergeordneten Prozess im übergeordneten Prozess zu erstellen. Nachdem ein Prozess fork() aufgerufen hat, weist das System dem neuen Prozess zunächst Ressourcen zu, z. B. Speicherdaten und Coderaum. Anschließend werden alle Werte und Status des ursprünglichen Prozesses in den neuen Prozess kopiert. Nur wenige Werte unterscheiden sich vom ursprünglichen Prozess, um verschiedene Prozesse zu unterscheiden.

Die Funktion fork() kehrt zweimal zurück, einmal zum übergeordneten Prozess (gibt die PID des untergeordneten Prozesses oder Informationen zum Fork-Fehler zurück) und einmal zum untergeordneten Prozess (gibt 0 zurück). Zu diesem Zeitpunkt trennten sich die Wege der beiden Prozesse und jeder wurde im System ausgeführt.

2. Nicht blockierendes IO:

Was ist IO, also der Betrieb von Eingabe und Ausgabe? Die Essenz von Netzwerk-E/A besteht darin, dass Sockets im Linux-System als Stream abstrahiert werden, und E/A kann als Konvektionsoperation verstanden werden. Bei einem IO-Zugriff (am Beispiel Lesen) werden die Daten zunächst in den Puffer des Betriebssystemkerns und dann aus dem Puffer des Betriebssystemkerns in den Adressraum des Anwendungsprogramms kopiert.

Wenn also ein Lesevorgang stattfindet, durchläuft er zwei Phasen:

Die erste Phase (Warten auf Daten): Warten darauf, dass die Daten bereit sind (Warten darauf, dass die Daten bereit sind bereit).

Die zweite Stufe (Kopieren von Daten): Kopieren der Daten vom Kernel in den Prozess (Kopieren der Daten vom Kernel in den Prozess)

Für Socket-Stream (d. h. IO),

Schritt 1: Normalerweise wird darauf gewartet, dass ein Datenpaket im Netzwerk ankommt und dann in einen Puffer im Kernel kopiert wird.

Schritt 2: Kopieren Sie die Daten aus dem Kernel-Puffer in den Anwendungsprozesspuffer.

Die Modelle von Netzwerk-IO sind ungefähr wie folgt:

Synchronous IO)

Blocking IO (Blocking IO) IO ) Ressource nicht verfügbar ist, wird die IO-Anfrage bis zum Rückmeldungsergebnis (Daten oder Timeout) blockiert. Unter Linux sind alle Sockets standardmäßig blockiert. Das Merkmal der Blockierung von E/A besteht darin, dass sie in beiden Phasen der E/A-Ausführung (Warten auf Daten und Kopieren von Daten) blockiert sind.

Wenn nicht blockierende IO-Ressourcen (nicht blockierende IO-Ressourcen) nicht verfügbar sind, wird die IO-Anfrage verlassen und zurückgegeben, und die Rückgabedaten zeigen an, dass die Ressource nicht verfügbar ist. Wenn die Daten unter Linux nicht bereit sind, wird der Benutzerprozess nicht blockiert, und der Kernel kehrt sofort zum Prozess zurück, was darauf hinweist, dass dieser Befehl nicht sofort ausgeführt werden kann (EAGAIN oder EWOULDBLOCK). Daher wird die Nichtblockierung durch Abfragen erreicht.

Multiplexing IO (Multiplexing IO) IO-Multiplexing nennen wir Select, Poll und Epoll. An manchen Stellen wird diese IO-Methode auch als ereignisgesteuertes IO bezeichnet. Der Vorteil von select/epoll besteht darin, dass ein einzelner Prozess die E/A mehrerer Netzwerkverbindungen gleichzeitig verarbeiten kann.

Das Grundprinzip besteht darin, dass die Select-, Poll- und Epoll-Funktionen kontinuierlich alle Sockets abfragen, für die sie verantwortlich sind. Wenn Daten in einem bestimmten Socket eintreffen, wird der Benutzerprozess benachrichtigt. Im IO-Multiplexing-Modell ist in der Praxis jeder Socket im Allgemeinen auf nicht blockierend eingestellt.

Der gesamte Benutzerprozess ist jedoch tatsächlich ständig blockiert. Es ist nur so, dass der Prozess durch die Auswahlfunktion und nicht durch Socket-E/A blockiert wird. Daher wird das E/A-Multiplexing bei Systemaufrufen wie select und epoll blockiert, nicht jedoch bei echten E/A-Systemaufrufen wie recvfrom.

Signalgesteuerte E/A (signalgesteuerte E/A)

Asynchrone E/A (asynchrone E/A) Nachdem der Benutzerprozess den Lesevorgang initiiert hat, kann er sofort mit anderen Aufgaben beginnen . Aus der Sicht des Kernels wird andererseits, wenn er einen asynchronen Lesevorgang empfängt, dieser sofort zurückgegeben, sodass keine Blockierung des Benutzerprozesses verursacht wird.

Dann wartet der Kernel auf den Abschluss der Datenvorbereitung und kopiert die Daten dann in den Benutzerspeicher. Wenn dies alles abgeschlossen ist, sendet der Kernel ein Signal an den Benutzerprozess, um ihm dies mitzuteilen Der Lesevorgang ist abgeschlossen.

3. Epoll ist jetzt eine verbesserte Abfrage, die vom Linux-Kernel erstellt wurde, um große Mengen von Dateideskriptoren zu verarbeiten Version der Schnittstelle Select/Poll, die die System-CPU-Auslastung des Programms erheblich verbessern kann, wenn nur eine kleine Anzahl aktiver Verbindungen unter einer großen Anzahl gleichzeitiger Verbindungen aktiv ist.

PS. Mehrere Punkte zu beachten:

1: Ist IO-Multiplexing ein synchrones Blockierungsmodell oder ein asynchrones Blockierungsmodell?

Die Synchronisierung erfordert das aktive Warten auf Nachrichtenbenachrichtigungen, während die Asynchronität den passiven Empfang von Nachrichtenbenachrichtigungen und den passiven Erhalt von Nachrichten durch Rückrufe, Benachrichtigungen, Status usw. erfordert. Wenn das E/A-Multiplexing die Auswahlstufe blockiert, wartet der Benutzerprozess aktiv und ruft die Auswahlfunktion auf, um die Statusmeldung „Datenbereit“ zu erhalten, und sein Prozessstatus wird blockiert. Daher wird IO-Multiplexing als synchroner Blockierungsmodus klassifiziert.

2: Was genau ist Parallelität? Was ist der Zustand hoher Parallelität?

Hochgradig gleichzeitige Programme verwenden im Allgemeinen die synchrone, nicht blockierende Methode anstelle der Multithreading + synchronen Blockierungsmethode. Um dies zu verstehen, schauen Sie sich zunächst den Unterschied zwischen Parallelität und Parallelität an. Das heißt, die Anzahl der Parallelität bezieht sich auf die Anzahl der gleichzeitig ausgeführten Aufgaben (z. B. gleichzeitig bediente HTTP-Anforderungen), während die Anzahl der Parallelität die Anzahl der physischen Ressourcen ist, die gleichzeitig arbeiten können ( (z. B. die Anzahl der CPU-Kerne).

Durch die richtige Planung verschiedener Aufgabenphasen kann die Anzahl der Parallelitäten weitaus größer sein als der Grad der Parallelität. Dies ist das Geheimnis, warum einige CPUs Zehntausende gleichzeitiger Benutzeranforderungen unterstützen können. In dieser Situation mit hoher Parallelität ist die Erstellung eines Prozesses oder Threads für jede Aufgabe (Benutzeranforderung) sehr kostspielig. Die synchrone, nicht blockierende Methode kann mehrere E/A-Anfragen in den Hintergrund werfen, wodurch eine große Anzahl gleichzeitiger E/A-Anfragen in einem Prozess bearbeitet werden kann.

Das obige ist der detaillierte Inhalt vonMehrere Konzepte, die Sie in Workerman kennen müssen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1654
14
PHP-Tutorial
1252
29
C#-Tutorial
1225
24
Implementieren Sie das Hoch- und Herunterladen von Dateien in Workerman-Dokumenten Implementieren Sie das Hoch- und Herunterladen von Dateien in Workerman-Dokumenten Nov 08, 2023 pm 06:02 PM

Um das Hochladen und Herunterladen von Dateien in Workerman-Dokumenten zu implementieren, sind spezifische Codebeispiele erforderlich. Einführung: Workerman ist ein leistungsstarkes PHP-Framework für die asynchrone Netzwerkkommunikation, das einfach, effizient und benutzerfreundlich ist. In der tatsächlichen Entwicklung sind das Hochladen und Herunterladen von Dateien häufige Funktionsanforderungen. In diesem Artikel wird erläutert, wie das Workerman-Framework zum Implementieren des Hochladens und Herunterladens von Dateien verwendet wird, und es werden spezifische Codebeispiele aufgeführt. 1. Datei-Upload: Unter Datei-Upload versteht man die Übertragung von Dateien vom lokalen Computer auf den Server. Folgendes wird verwendet

So implementieren Sie die grundlegende Verwendung von Workerman-Dokumenten So implementieren Sie die grundlegende Verwendung von Workerman-Dokumenten Nov 08, 2023 am 11:46 AM

Einführung in die Implementierung der grundlegenden Verwendung von Workerman-Dokumenten: Workerman ist ein leistungsstarkes PHP-Entwicklungsframework, mit dem Entwickler problemlos Netzwerkanwendungen mit hoher Parallelität erstellen können. In diesem Artikel wird die grundlegende Verwendung von Workerman vorgestellt, einschließlich Installation und Konfiguration, Erstellung von Diensten und Überwachungsports, Bearbeitung von Clientanfragen usw. Und geben Sie entsprechende Codebeispiele an. 1. Installieren und konfigurieren Sie Workerman. Geben Sie in der Befehlszeile den folgenden Befehl ein, um Workerman zu installieren: c

Was ist besser, Swoole oder Workerman? Was ist besser, Swoole oder Workerman? Apr 09, 2024 pm 07:00 PM

Swoole und Workerman sind beide leistungsstarke PHP-Server-Frameworks. Swoole ist für seine asynchrone Verarbeitung, hervorragende Leistung und Skalierbarkeit bekannt und eignet sich für Projekte, die eine große Anzahl gleichzeitiger Anfragen und einen hohen Durchsatz verarbeiten müssen. Workerman bietet die Flexibilität sowohl des asynchronen als auch des synchronen Modus mit einer intuitiven API, die sich besser für Benutzerfreundlichkeit und Projekte eignet, die ein geringeres Parallelitätsvolumen bewältigen.

Workerman-Entwicklung: So implementieren Sie Echtzeit-Videoanrufe basierend auf dem UDP-Protokoll Workerman-Entwicklung: So implementieren Sie Echtzeit-Videoanrufe basierend auf dem UDP-Protokoll Nov 08, 2023 am 08:03 AM

Workerman-Entwicklung: Echtzeit-Videoanrufe basierend auf dem UDP-Protokoll Zusammenfassung: In diesem Artikel wird erläutert, wie Sie mit dem Workerman-Framework eine Echtzeit-Videoanruffunktion basierend auf dem UDP-Protokoll implementieren. Wir werden ein tiefgreifendes Verständnis der Eigenschaften des UDP-Protokolls erlangen und anhand von Codebeispielen zeigen, wie man eine einfache, aber vollständige Echtzeit-Videoanrufanwendung erstellt. Einführung: In der Netzwerkkommunikation sind Echtzeit-Videoanrufe eine sehr wichtige Funktion. Beim herkömmlichen TCP-Protokoll kann es bei der Implementierung von Videoanrufen mit hoher Echtzeitgeschwindigkeit zu Problemen wie Übertragungsverzögerungen kommen. Und UDP

So implementieren Sie die Timer-Funktion im Workerman-Dokument So implementieren Sie die Timer-Funktion im Workerman-Dokument Nov 08, 2023 pm 05:06 PM

So implementieren Sie die Timer-Funktion im Workerman-Dokument Workerman ist ein leistungsstarkes PHP-Framework für die asynchrone Netzwerkkommunikation, das eine Fülle von Funktionen bereitstellt, einschließlich der Timer-Funktion. Verwenden Sie Timer, um Code innerhalb bestimmter Zeitintervalle auszuführen. Dies eignet sich sehr gut für Anwendungsszenarien wie geplante Aufgaben und Abfragen. Als nächstes werde ich detailliert vorstellen, wie die Timer-Funktion in Workerman implementiert wird, und spezifische Codebeispiele bereitstellen. Schritt 1: Workerman installieren Zuerst müssen wir Worker installieren

So implementieren Sie die Reverse-Proxy-Funktion im Workerman-Dokument So implementieren Sie die Reverse-Proxy-Funktion im Workerman-Dokument Nov 08, 2023 pm 03:46 PM

Für die Implementierung der Reverse-Proxy-Funktion im Workerman-Dokument sind spezifische Codebeispiele erforderlich. Einführung: Workerman ist ein leistungsstarkes PHP-Framework für die Netzwerkkommunikation mit mehreren Prozessen, das umfangreiche Funktionen und leistungsstarke Leistung bietet und in der Web-Echtzeitkommunikation weit verbreitet ist Service-Szenarien. Unter anderem unterstützt Workerman auch die Reverse-Proxy-Funktion, mit der Lastausgleich und statisches Ressourcen-Caching realisiert werden können, wenn der Server externe Dienste bereitstellt. In diesem Artikel wird erläutert, wie Sie Workerman zum Implementieren der Reverse-Proxy-Funktion verwenden.

So erstellen Sie mit Workerman ein hochverfügbares Lastausgleichssystem So erstellen Sie mit Workerman ein hochverfügbares Lastausgleichssystem Nov 07, 2023 pm 01:16 PM

Für die Verwendung von Workerman zum Aufbau eines hochverfügbaren Lastausgleichssystems sind spezifische Codebeispiele erforderlich. Im Bereich der modernen Technologie müssen mit der rasanten Entwicklung des Internets immer mehr Websites und Anwendungen eine große Anzahl gleichzeitiger Anforderungen verarbeiten. Um eine hohe Verfügbarkeit und Leistung zu erreichen, ist das Lastausgleichssystem zu einer der wesentlichen Komponenten geworden. In diesem Artikel wird erläutert, wie Sie mit dem PHP-Open-Source-Framework Workerman ein Hochverfügbarkeits-Lastausgleichssystem erstellen und spezifische Codebeispiele bereitstellen. 1. Einführung in WorkermanWorke

So implementieren Sie die TCP/UDP-Kommunikation in der Workerman-Dokumentation So implementieren Sie die TCP/UDP-Kommunikation in der Workerman-Dokumentation Nov 08, 2023 am 09:17 AM

Für die Implementierung der TCP/UDP-Kommunikation im Workerman-Dokument sind spezifische Codebeispiele erforderlich. Workerman ist ein leistungsstarkes asynchrones ereignisgesteuertes PHP-Framework, das häufig zur Implementierung der TCP- und UDP-Kommunikation verwendet wird. In diesem Artikel wird erläutert, wie Sie mit Workerman TCP- und UDP-basierte Kommunikation implementieren, und entsprechende Codebeispiele bereitstellen. 1. Erstellen Sie einen TCP-Server für die TCP-Kommunikation. Es ist sehr einfach, einen TCP-Server mit Workerman zu erstellen. Sie müssen nur den folgenden Code schreiben: <?ph

See all articles