Erreichen von Multithreading in PHP

Jinku Hu 30 März 2022
  1. Verwenden Sie die Parallel Parallel Concurrency Extension, um Multithreading in PHP zu erreichen
  2. Verwenden Sie die Funktion popen(), um Multithreading in PHP zu erreichen
Erreichen von Multithreading in PHP

Multithreading ist eine Form der Programmausführung, bei der ein einzelner Prozess mehrere Threads erstellt und diese gleichzeitig ausführen. Dieses Tutorial behandelt Multithreading in PHP und zeigt, wie man es erreicht.

Verwenden Sie die Parallel Parallel Concurrency Extension, um Multithreading in PHP zu erreichen

Mit der parallelen Nebenläufigkeitserweiterung Parallel können wir Multithreading in PHP erreichen.

Die Erweiterung stellt einen Interpreter-Thread parallel\Runtime bereit. Wir können ein Objekt aus der Klasse parallel\Runtime() erstellen und damit einen Thread erstellen.

Die Klasse stellt eine Methode run() zur Verfügung, die die parallele Ausführung der Tasks plant. Wir können Closure als Parameter an die run-Methode übergeben.

Der Parameter heißt im Allgemeinen task, und wir können auch ein Array als zweiten Parameter der Methode angeben. Der Inhalt des Arrays wird an die Aufgabe übergeben.

Es gibt einige Anforderungen, bevor Sie die parallele Nebenläufigkeitserweiterung Parallel herunterladen können. Die PHP-Version sollte 8.0 sein und Zend Thread Safe (ZTS) sollte aktiviert sein.

Der Header <pthread.h> ist eine weitere Voraussetzung. Wir können die Erweiterung von pecl wie folgt herunterladen.

pecl install parallel

Mit der for-Schleife können wir die parallele Ausführung des Programms testen.

Zum Beispiel können wir eine Schleife innerhalb der run()-Methode und eine andere Schleife außerhalb der Methode ausführen. Unter solchen Bedingungen erfolgt die Codeausführung parallel.

Erstellen Sie beispielsweise ein Objekt $rt der Klasse parallel\Runtime und rufen Sie dann mit dem Objekt die Methode run() auf. Schreiben Sie innerhalb der Methode run() eine anonyme Funktion.

Schreiben Sie zuerst eine for-Schleife, um das +-Zeichen fünfzig Mal innerhalb der Funktion auszugeben. Als nächstes schreiben Sie außerhalb der Methode run() eine weitere for-Schleife, um das --Zeichen fünfzig Mal auszugeben.

Da die Schleife innerhalb der run()-Methode in einem separaten Thread läuft, wird die Schleife ausserhalb der run()-Methode gleichzeitig ausgeführt. Als Ergebnis werden die Zeichen - und + gleichzeitig gedruckt, wie im Abschnitt Ausgabe unten gezeigt.

Daher können wir die Erweiterung für parallele Parallelität verwenden, um Multithreading in PHP zu erreichen.

Beispielcode:

$rt = new \parallel\Runtime();

$rt->run(function(){
 for ($i = 0; $i < 50; $i++)
 echo "+";
});

for ($i = 0; $i < 50; $i++) {
 echo "-";
}

Ausgabe:

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Verwenden Sie die Funktion popen(), um Multithreading in PHP zu erreichen

Wir können die Funktion popen() verwenden, um parallele Prozesse in PHP zu öffnen.

Die Funktion verzweigt den Prozess, und als Ergebnis wird eine parallele Verarbeitung erreicht. Es findet keine gemeinsame Nutzung der Ressourcen durch die Prozesse statt.

Auf diese Weise können wir Multithreading in PHP erreichen. Die Funktion popen() erstellt eine Pipe zum Fork-Prozess.

Wir können die Funktion popen() durchlaufen und mehrere Prozesse erstellen, um Multithreading zu erreichen. Die Funktion popen() nimmt command als ersten Parameter und mode als zweiten Parameter.

Der Modus kann entweder r oder w sein.

Erstellen Sie beispielsweise eine for-Schleife, die fünfmal wiederholt wird. Erstellen Sie innerhalb der Schleife eine weitere for-Schleife, die sich fünfmal wiederholt.

Erstellen Sie innerhalb der untergeordneten Schleife ein Array $process, das die Funktion popen() speichert. Setzen Sie als ersten und zweiten Parameter die PHP-Datei message.php und den r-Modus.

Erstellen Sie als nächstes eine weitere untergeordnete Schleife und verwenden Sie die Funktion pclose(), um den $process zu schließen.

Hier werden die fünf Prozesse parallel in der ersten untergeordneten Schleife ausgeführt. Die Prozesse werden in der zweiten Kindschleife mit der Funktion pclose() beendet.

So erreichen wir Multithreading mit der Funktion popen() in PHP.

Beispielcode:

for ($i=0; $i<5; $i++) {
 
 for ($j=0; $j<5; $j++) {
 $process[$j] = popen('message.php', 'r');
 }

 for ($j=0; $j<5; ++$j) {
 pclose($process[$j]);
 }
}
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook