PHP-Multithread-Programmierimplementierung und nicht blockierende Implementierung. PHP unterstützt standardmäßig kein Multithreading. Um Multithreading zu verwenden, müssen Sie die pthread-Erweiterung installieren. Nach der Installation können Sie Multithreading durchführen.
Thread-Konzept
Thread ist die kleinste Einheit, die das Betriebssystem planen kann
Ein Multithread-Programm wird eher von der geplant Betriebssystem als ein Single-Thread-Programm Größer, daher sind Multi-Thread-Programme im Allgemeinen effizienter als Single-Thread-Programme
Mehrere Threads eines Multi-Thread-Programms können gleichzeitig auf mehreren Kernen eines Multi-Core ausgeführt werden CPU, die die Multi-Core-Maschine voll ausnutzt;
Der Systemaufwand für das Erstellen und Wechseln von Threads ist geringer als der von Prozessen und daher bis zu einem gewissen Grad effizienter als mehrere Prozesse 🎜>Threads teilen sich von Natur aus den Speicherplatz und die Kommunikation zwischen Threads ist einfacher. Vermeidet die Einführung neuer Komplexität durch Prozess-IPC.
Wann werden Threads verwendet?Das Blockieren von E/A führt zu einer Aufgabenplanung im Betriebssystem und blockiert die aktuelle Aufgabe, wenn also viele E/A vorhanden sind im Code, Bei Verwendung von Multithreading kann der Code parallelisiert werden
Multithreading kann die CPU voll ausnutzen. Wenn also mehrere große Berechnungscodes vorhanden sind, können Sie zur Ausführung auch Multithreading verwenden sie parallel
Verwenden Sie das Gute und das Schlechte von ThreadsDie von PHP implementierte Thread-Sicherheit verwendet hauptsächlich den TSRM-Mechanismus, um globale Variablen und statische Variablen zu isolieren und global zu kopieren Variablen und statische Variablen für jeden Thread. Jeder Thread verwendet ein Backup des Hauptthreads, wodurch Variablenkonflikte und Thread-Sicherheitsprobleme vermieden werden.
Sobald der Sub-Thread mit der Ausführung beginnt, kann der Haupt-Thread die Ausführungsdetails des Sub-Threads nicht mehr anpassen
Erweiterte InstallationPHP Unterstützt standardmäßig nicht mehrere Threads. Um die pthread-Erweiterung zu installieren, müssen Sie den Parameter --enable-maintainer-zts verwenden, um PHP neu zu kompilieren Thread-Sicherheit beim Kompilieren von PHP.
./configure --enable-maintainer-zts --with-tsrm-pthreads
class Request extends Thread { public $url; public $response; public function __construct($url) { $this->url = $url;
} public function run() { $this->response = file_get_contents($this->url);
}
}
$chG = new Request("www.google.com");
$chB = new Request("www.baidu.com");
$chG ->start();
$chB ->start();
$chG->join();
$chB->join();
$gl = $chG->response;
$bd = $chB->response;
Verwenden Sie fastcgi_finish_request()
echo "program start..."; fastcgi_finish_request(); sleep(1);echo 'debug1...'; sleep(10);echo 'debug2...';
Verwenden Sie fsockopen ( )
stream_set_blocking()
cURL verwenden
Gearman/Swoole-Erweiterung verwenden
Cache und Warteschlange verwenden
redis
Systembefehl aufrufen
Verwenden Sie pcntl_fork()
PHP unterstützt nativ
yield
Verwandte Empfehlungen:
Das obige ist der detaillierte Inhalt vonPHP implementiert nicht blockierende und Multithread-Programmierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!