„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Parallelität und Parallelität in PHP

Parallelität und Parallelität in PHP

Veröffentlicht am 31.07.2024
Durchsuche:149

Concurrency and Parallelism in PHP

Parallelität und Parallelität sind wesentliche Konzepte in der modernen Programmierung und ermöglichen es Anwendungen, mehrere Aufgaben gleichzeitig auszuführen, entweder durch verschachtelte Ausführung (Parallelität) oder gleichzeitige Ausführung (Parallelität). PHP, das vor allem für sein synchrones Ausführungsmodell bekannt ist, hat sich weiterentwickelt, um diese Paradigmen durch verschiedene Techniken zu unterstützen.

Das Standardausführungsmodell von PHP

PHP folgt traditionell einem synchronen Ausführungsmodell, insbesondere wenn es mit Apache in einem typischen Webserver-Setup verwendet wird. In diesem Modell wird jede HTTP-Anfrage von einem einzelnen PHP-Prozess verarbeitet. Die Schritte zur Bearbeitung einer Anfrage umfassen:

  1. Apache empfängt eine HTTP-Anfrage und leitet sie an PHP weiter.
  2. PHP führt das Skript vom Anfang bis zum Ende in einem einzelnen Thread aus.
  3. PHP gibt die Ausgabe an Apache zurück, der die Antwort dann an den Client zurücksendet.

Dieses Modell gewährleistet Einfachheit und leichte Verständlichkeit, kann jedoch bei Aufgaben, die eine parallele Ausführung erfordern oder mehrere Aufgaben gleichzeitig bearbeiten, ineffizient werden.

Entwicklung von Parallelität und Parallelität in PHP

Da Webanwendungen immer komplexer wurden, wuchs der Bedarf an gleichzeitiger und paralleler Ausführung in PHP. Lassen Sie uns die Techniken erkunden, die PHP bietet, um diese Paradigmen zu erreichen.

1. Synchroner Code

Synchroner Code ist die einfachste Form der Ausführung, bei der Aufgaben nacheinander ausgeführt werden.

echo "Synchronous Code Example:\n";
function synchronousFunction() {
    for ($i = 0; $i 



In diesem Beispiel wird jede Iteration der Schleife nacheinander ausgeführt, mit einer Verzögerung von einer Sekunde zwischen den Iterationen. Dieser Ansatz ist unkompliziert, aber ineffizient für E/A-gebundene oder CPU-intensive Aufgaben, die von einer parallelen Ausführung profitieren könnten.

2. Einen Prozess forken

Forking erstellt einen neuen Prozess (Kind), der gleichzeitig mit dem ursprünglichen Prozess (Eltern) ausgeführt wird. Dies ist nützlich, um Aufgaben zu parallelisieren.

echo "\nForking Process Example:\n";
function forkProcess() {
    $pid = pcntl_fork();
    if ($pid == -1) {
        die('could not fork');
    } else if ($pid) {
        echo "Parent Process: PID $pid\n";
        pcntl_wait($status); // Protect against Zombie children
    } else {
        echo "Child Process: Hello from the child process!\n";
        exit(0);
    }
}
forkProcess();

In diesem Code erstellt pcntl_fork() einen untergeordneten Prozess. Die übergeordneten und untergeordneten Prozesse werden gleichzeitig ausgeführt, sodass eine parallele Aufgabenausführung möglich ist. Der übergeordnete Prozess wartet auf den Abschluss des untergeordneten Prozesses, um die Erstellung von Zombie-Prozessen zu vermeiden.

3. Einfädeln

Die Threading-Funktionen von PHP sind über Erweiterungen wie pthreads verfügbar. Threads sind leichter als Prozesse und teilen sich denselben Speicherplatz, sodass sie für Aufgaben geeignet sind, die gemeinsame Daten erfordern.

if (!class_exists('Thread')) {
    die("Threads are not supported in this PHP build\n");
}

echo "\nThreading Example:\n";
class MyThread extends Thread {
    public function run() {
        for ($i = 0; $i start();
$thread->join();

Dieses Beispiel definiert eine MyThread-Klasse, die Thread erweitert. Die run-Methode wird in einem neuen Thread ausgeführt, der gleichzeitig mit dem Hauptthread ausgeführt wird. Dieser Ansatz ist nützlich für E/A-gebundene Vorgänge, bei denen Threads das Warten auf Ressourcen bewältigen können.

4. Generatoren

Generatoren bieten eine Möglichkeit, einfache Co-Routinen zu implementieren, sodass Funktionen iterativ Ergebnisse liefern können, ohne das gesamte Programm zu blockieren.

echo "\nGenerators Example:\n";
function simpleGenerator() {
    yield 'First';
    yield 'Second';
    yield 'Third';
}

$gen = simpleGenerator();
foreach ($gen as $value) {
    echo "Generator Yielded: $value\n";
}

Generatoren verwenden das Schlüsselwort yield, um Werte einzeln zu erzeugen, sodass die Funktion angehalten und fortgesetzt werden kann, was eine Form des kooperativen Multitaskings ermöglicht.

PHP hat von seinen synchronen Wurzeln einen langen Weg zurückgelegt, um verschiedene Formen der Parallelität und Parallelität zu unterstützen. Während synchroner Code für viele Anwendungsfälle einfach und effektiv bleibt, eröffnen Techniken wie Forking-Prozesse, Threading und die Verwendung von Generatoren neue Möglichkeiten für die effiziente Abwicklung komplexer, parallelisierbarer Aufgaben.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/francescoagati/concurrency-and-parallelism-in-php-6fc?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3