Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verwende ich PHP7.0 für die gleichzeitige Programmierung?

Wie verwende ich PHP7.0 für die gleichzeitige Programmierung?

WBOY
WBOYOriginal
2023-05-28 08:51:241470Durchsuche

PHP7.0 ist eine der am häufigsten verwendeten serverseitigen Programmiersprachen. Es verfügt über eine benutzerfreundliche Oberfläche, ist leicht zu erlernen, leistungsstarke Funktionen und eine umfangreiche Erweiterungsbibliothek. Auch im Hinblick auf die gleichzeitige Programmierung verfügt PHP7.0 über viele hervorragende Tools und Technologien. In diesem Artikel wird erläutert, wie Sie gleichzeitige Programmierung in PHP7.0 durchführen.

1. Was ist gleichzeitige Programmierung? Unter gleichzeitiger Programmierung versteht man eine Programmiermethode, die die gleichzeitige Ausführung mehrerer Aufgaben durch mehrere Threads, Prozesse oder Coroutinen ermöglicht. Bei der Programmierung kann der effektive Einsatz von Parallelitätstechniken die Programmleistung und den Durchsatz verbessern.

2. Gleichzeitige Programmiertools von PHP7.0

In PHP7.0 stehen viele Tools zum Schreiben gleichzeitiger Programme zur Auswahl. Hier sind einige häufig verwendete Tools:

1. PCNTL-Erweiterung

Die von PHP bereitgestellte PCNTL-Erweiterung bietet eine Reihe von Funktionen zur Verwaltung von Prozessen und Signalverarbeitung. Mit dieser Erweiterung können Sie problemlos mehrere Aufgaben verwalten, die gleichzeitig im selben Prozess ausgeführt werden.

2. pthread-Erweiterung

pthread-Erweiterung ist eine nützliche PHP-Erweiterung, die die POSIX-Thread-Schnittstelle in PHP implementiert. Diese Erweiterung bietet verschiedene Möglichkeiten zum Erstellen, Zerstören, Synchronisieren und Kommunizieren von Threads.

3. Swoole-Erweiterung

Swoole ist eine PHP-Erweiterung, die asynchrone, nicht blockierende und Coroutine-Programmierfunktionen bereitstellt. Diese Erweiterung hat sich zu einem der beliebtesten Open-Source-Projekte in PHP entwickelt und bietet ein vollständiges Framework für die gleichzeitige Programmierung, einschließlich Netzwerkprotokollen, Thread-Pools, asynchronen Aufgaben und mehr.

4. AMQP-Protokoll

AMQP-Protokoll, der vollständige Name lautet Advanced Message Queuing Protocol, ist ein Standard-Nachrichtenwarteschlangenprotokoll. Mit dem AMQP-Protokoll können asynchrone und verteilte Vorgänge implementiert und gleichzeitige Programmierung einfach implementiert werden.

3. Technologien und Beispiele für die Verwendung von PHP7.0 für die gleichzeitige Programmierung:

1. Verwendung der PCNTL-Erweiterung: Die klassische Methode zum Synchronisieren mehrerer Aufgaben ist Benutzen Sie den Gabelmechanismus. Mit dieser Technologie können Sie mehrere Unterprozesse in einem einzigen Prozess starten, um mehrere Aufgaben gleichzeitig auszuführen. Das Folgende ist der Beispielcode:

$NUM_CHILDREN = 5;  

$pid_array = array();  

for ($i = 0; $i < $NUM_CHILDREN; ++$i) {  
    $pid = pcntl_fork();  

    if ($pid == -1) {  
        die('could not fork');  
    } else if ($pid) {  
        $pid_array[] = $pid;  
    } else {  
        sleep(5);  
        exit(0);  
    }  
}  

while(count($pid_array) > 0) {  
    foreach($pid_array as $key => $pid) {  
        $res = pcntl_waitpid($pid, $status, WNOHANG);  

        if($res == -1 || $res > 0) {  
            unset($pid_array[$key]);  
        }  
    }  
}  

Das obige Beispiel definiert zunächst eine Variable $num_children, die die Anzahl der Aufgaben darstellt, die gleichzeitig ausgeführt werden müssen. Anschließend werden untergeordnete $num_children-Prozesse gestartet und auf deren Abschluss gewartet. Beachten Sie, dass in diesem Beispiel der Hauptprozess endet, nachdem der untergeordnete Prozess abgeschlossen ist.

2. Verwenden Sie die pthread-Erweiterung

Mit der pthread-Erweiterung können Sie problemlos mehrere gleichzeitige Threads erstellen und verwalten, um mehrere Aufgaben gleichzeitig auszuführen. Das Folgende ist ein einfaches Beispiel:

class MyThread extends Thread {   
    public function run() {  
        echo "Task started";  
        sleep($this->rand(1, 5));  
        echo "Task completed";  
    }  
}  

$thread1 = new MyThread();  
$thread1->start();  

$thread2 = new MyThread();  
$thread2->start();  

$thread1->join();  
$thread2->join();  

Im obigen Code ist eine benutzerdefinierte Thread-Klasse namens MyThread definiert. Diese Klasse überschreibt die Ausführungsmethode in der Thread-Klasse und definiert darin gleichzeitige Aufgaben. Erstellen Sie im Hauptcodeabschnitt eine Thread-Instanz und verwenden Sie die start()-Methode, um den Thread zu starten. Verwenden Sie dann die Methode „join()“, um auf den Abschluss des Threads zu warten.

3. Verwenden Sie die Swoole-Erweiterung. Die Swoole-Erweiterung bietet ein praktisches Framework für die gleichzeitige Programmierung, das problemlos asynchrone, nicht blockierende und Coroutine-Entwicklung bewältigen kann. Das Folgende ist ein Beispiel für gleichzeitige Programmierung mit Swoole:

$server = new swoole_http_server("127.0.0.1", 9501);  

$server->on('request', function ($request, $response) {  
    $response->header("Content-Type", "text/plain");  
    $response->end("Hello World
");  
});  

$server->start();

Der obige Code erstellt einen Swoole-HTTP-Server, der Port 9501 überwacht. Auf Anfrage gibt der Server einfach „Hello World“ zurück. Beachten Sie, dass der in diesem Beispiel geschriebene Code asynchron und nicht blockierend ist. Dadurch kann der Server viele Anfragen gleichzeitig mit hoher Geräteleistung bearbeiten.

4. Verwenden Sie das AMQP-Protokoll.

Das AMQP-Protokoll ist ein Standard für verteilte Nachrichtenwarteschlangen. Mit dem AMQP-Protokoll können Nachrichtensende- und -empfangsvorgänge sowie asynchrone Programmierung einfach implementiert werden. Das Folgende ist ein Beispiel für gleichzeitige AMQP-Programmierung:

require __DIR__ . '/vendor/autoload.php';  

use PhpAmqpLibConnectionAMQPConnection;  

$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');  
$channel = $connection->channel();  

$channel->queue_declare('task_queue', false, true, false, false);  

echo ' [*] Waiting for messages. To exit press CTRL+C', "
";  

$callback = function($msg) {  
  echo " [x] Received ", $msg->body, "
";  
  sleep(substr_count($msg->body, '.'));  
  echo " [x] Done", "
";  
};  

$channel->basic_qos(null, 1, null);  

$channel->basic_consume('task_queue', '', false, true, false, false, $callback);  

while(count($channel->callbacks)) {  
    $channel->wait();  
}  

$channel->close();  
$connection->close();  

Im obigen Code wird mithilfe des AMQP-Protokolls eine Aufgabenwarteschlange in der Rabbitmq-Warteschlange erstellt, um asynchrone Aufgaben abzurufen und nach Abschluss der Aufgabe einen Bericht zu erstellen. In diesem Beispiel verwenden wir die PhpAmqpLib-Bibliothek, eine PHP-Erweiterungsbibliothek, die das AMQP-Protokoll kapselt.

4. Zusammenfassung

Mit der gleichzeitigen Programmierung von PHP7.0 können Sie Anwendungen mit hoher Leistung und hohem Durchsatz einfacher implementieren. In diesem Artikel stellen wir einige häufig verwendete PHP-Tools für die gleichzeitige Programmierung vor, darunter die PCNTL-Erweiterung, die Pthread-Erweiterung, die Swoole-Erweiterung und das AMQP-Protokoll. Darüber hinaus zeigen wir auch einige Beispiele für die Verwendung dieser Tools. Wenn Sie die Leistung Ihrer Anwendung maximieren möchten, sollten Sie diese Techniken ausprobieren.

Das obige ist der detaillierte Inhalt vonWie verwende ich PHP7.0 für die gleichzeitige Programmierung?. 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