Heim  >  Artikel  >  Backend-Entwicklung  >  Parallelität und Parallelität in PHP

Parallelität und Parallelität in PHP

WBOY
WBOYOriginal
2024-07-17 08:08:58419Durchsuche

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 Skriptvom Anfang bis zum Ende in einem einzigen 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 < 3; $i++) {
        echo "Synchronous Loop Iteration: $i\n";
        sleep(1);
    }
}
synchronousFunction();

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 den gleichen 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 < 3; $i++) {
            echo "Thread Loop Iteration: $i\n";
            sleep(1);
        }
    }
}

$thread = new MyThread();
$thread->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, wodurch die Funktion angehalten und fortgesetzt werden kann, was eine Form von kooperativem Multitasking 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.

Das obige ist der detaillierte Inhalt vonParallelität und Parallelität in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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