Heim  >  Artikel  >  Backend-Entwicklung  >  PHP implementiert nicht blockierende und Multithread-Programmierung

PHP implementiert nicht blockierende und Multithread-Programmierung

不言
不言Original
2018-07-20 17:09:582342Durchsuche

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 Threads

Die 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 Installation

PHP 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

Instanz

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;

PHP nicht blockierend

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

$cmh = curl_multi_init();


Gearman/Swoole-Erweiterung verwenden

Cache und Warteschlange verwenden

redis


Systembefehl aufrufen

$cmd = 'nohup php ./processd.php $someVar >/dev/null &';


Verwenden Sie pcntl_fork()

PHP unterstützt nativ

yield


Verwandte Empfehlungen:


PHP-Installations-Threads-Multi-Thread-Erweiterung, PHP-Threads-Multi-Threading

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!

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