Für die Implementierung der Parallelitätsverarbeitung am Ende von PHP sind bestimmte Codebeispiele erforderlich.
Bei der Webentwicklung ist es häufig erforderlich, eine große Anzahl gleichzeitiger Anforderungen zu verarbeiten Lange Antwortzeiten und übermäßiger Serverdruck. PHP ist eine Sprache für die Webentwicklung. Die integrierte Multithreading-Unterstützung ist relativ schwach, sie kann jedoch die zugrunde liegende Parallelitätsverarbeitung durch andere Methoden erreichen.
1. Einführung in das Prinzip
In PHP wird jede Anfrage von einem neuen Prozess oder Thread verarbeitet, der vom Webserver geöffnet wird. Um die Parallelität zu verbessern, können unten Multiprozess- oder Multithread-Methoden verwendet werden, um mehrere Anforderungen gleichzeitig zu verarbeiten und so den Effekt einer Verbesserung der Parallelität zu erzielen.
Die Multiprozessmethode wird durch Erstellen eines untergeordneten Prozesses über die Fork-Funktion implementiert. Der untergeordnete Prozess erbt den Kontext (Variablen, Dateideskriptoren usw.) des übergeordneten Prozesses und kann den Speicher teilen. Multithreading wird durch die pthread-Erweiterung implementiert, die eine API zum Erstellen von Threads bereitstellt, die den Kontext des Prozesses gemeinsam nutzen können. 2. Bibliothek zur Implementierung der gleichzeitigen Verarbeitung mit. Swoole unterstützt asynchrone TCP/UDP/Unix-Socket-Protokolle, HTTP/WebSocket-Server sowie asynchrone MySQL-, Redis-, DNS-Abfragen und andere Funktionen.
Das Folgende ist ein Beispiel für einen einfachen HTTP-Server, der mit Swoole implementiert wurde:
<?php $http = new swoole_http_server("0.0.0.0", 9501); $http->on("start", function ($server) { echo "Swoole http server is started at http://127.0.0.1:9501 "; }); $http->on("request", function ($request, $response) { $response->header("Content-Type", "text/plain"); $response->end("Hello Swoole!"); }); $http->start();
Amp ist ein auf PHP basierendes asynchrones Programmierframework, das eine Reihe von Coroutinen und asynchronen, nicht blockierenden IO-APIs bereitstellt, um uns zu helfen Implementieren Sie die Parallelitätsverarbeitung auf niedriger Ebene. Amp unterstützt asynchrone TCP/UDP/Unix-Socket-Protokolle, HTTP/HTTPS-Clients, Server sowie asynchrone MySQL-, PostgreSQL-, Redis-, Memcached- und andere Funktionen.
Das Folgende ist ein Beispiel für einen einfachen HTTP-Server, der mit Amp implementiert wurde:
<?php require 'vendor/autoload.php'; use AmpHttpServerHttpServer; use AmpHttpServerRequestHandlerCallableRequestHandler; use AmpHttpServerResponse; use AmpHttpStatus; $server = new HttpServer([new CallableRequestHandler(function () { return new Response(Status::OK, ['content-type' => 'text/plain'], 'Hello, world!'); })]); $socket = AmpSocketlisten('0.0.0.0:9501'); $server->listen($socket); AmpLoop::run();
<?php $workerNum = 3; // 子进程数量 // 父进程等待子进程结束并回收资源 for ($i = 0; $i < $workerNum; $i++) { $pid = pcntl_fork(); if ($pid < 0) { // 创建子进程失败 exit('fork failed'); } elseif ($pid == 0) { // 子进程代码 echo 'worker ', $i, " pid is ", posix_getpid(), " "; // 这里是子进程具体的处理逻辑 sleep(10); exit(0); } } while (($ret = pcntl_waitpid(-1, $status, WNOHANG)) != -1) { // 回收子进程资源 if ($ret > 0) { echo "worker ", $ret, " exit with status ", $status, " "; } else { break; } }
<?php class MyWorker extends Thread { public function run() { echo 'Worker ', $this->getThreadId(), " starts "; // 这里是子线程具体的处理逻辑 sleep(10); echo 'Worker ', $this->getThreadId(), " ends "; } } $workerNum = 3; // 子线程数量 $workers = []; for ($i = 0; $i < $workerNum; $i++) { $workers[] = new MyWorker(); } foreach ($workers as $worker) { $worker->start(); } foreach ($workers as $worker) { $worker->join(); }
Die oben genannten sind zwei häufig verwendete Low-Level-Multi-Prozesse/. Natürlich können Sie auch fortgeschrittenere Methoden verwenden, beispielsweise die Verwendung von Frameworks von Drittanbietern wie ReactPHP und Workerman. In tatsächlichen Anwendungen ist es notwendig, eine geeignete Lösung basierend auf Geschäftsszenarien und -anforderungen auszuwählen, um die zugrunde liegende gleichzeitige Verarbeitung von PHP zu erreichen.
Das obige ist der detaillierte Inhalt vonSo implementieren Sie die zugrunde liegende Parallelitätsverarbeitung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!