Ist es möglich, das Multithreading-Modell in PHP zu implementieren, ob es tatsächlich implementiert werden soll? es oder simulieren Sie es einfach. Zuvor wurde vorgeschlagen, das Betriebssystem zu zwingen, eine weitere Instanz der ausführbaren PHP-Datei zu laden und andere gleichzeitige Prozesse zu verarbeiten.
Das Problem dabei ist, dass sich die PHP-Instanz nach Abschluss der Ausführung des PHP-Codes immer noch im Speicher befindet, da sie nicht von PHP aus beendet werden kann. Sie können sich also vorstellen, was passiert, wenn Sie mehrere Threads simulieren. Daher suche ich immer noch nach einer Möglichkeit, Multithreading in PHP effizient durchzuführen oder zu simulieren. Irgendwelche Ideen?
Ja, Sie können pthreads für Multi-Threading in PHP verwenden.
Laut der PHP-Dokumentation:
pthreads ist eine objektorientierte API, die alle für Multithreading in PHP erforderlichen Tools bereitstellt. PHP-Anwendungen können Threads, Worker-Threads und Thread-Objekte erstellen, lesen, schreiben, ausführen und synchronisieren.
Warnung:
Die pthreads-Erweiterung kann nicht in einer Webserverumgebung verwendet werden. Daher sollte Multithreading in PHP auf CLI-basierte Anwendungen beschränkt werden.
#!/usr/bin/php <?php class AsyncOperation extends Thread { public function __construct($arg) { $this->arg = $arg; } public function run() { if ($this->arg) { $sleep = mt_rand(1, 10); printf('%s: %s -start -sleeps %d' . "\n", date("g:i:sa"), $this->arg, $sleep); sleep($sleep); printf('%s: %s -finish' . "\n", date("g:i:sa"), $this->arg); } } } // 创建一个数组 $stack = array(); // 启动多线程 foreach ( range("A", "D") as $i ) { $stack[] = new AsyncOperation($i); } // 启动所有线程 foreach ( $stack as $t ) { $t->start(); } ?>
error_reporting(E_ALL); class AsyncWebRequest extends Thread { public $url; public $data; public function __construct($url) { $this->url = $url; } public function run() { if (($url = $this->url)) { /* * 如果请求大量数据,你可能想要使用 fsockopen 和 read,并在读取之间使用 usleep */ $this->data = file_get_contents($url); } else printf("Thread #%lu was not provided a URL\n", $this->getThreadId()); } } $t = microtime(true); $g = new AsyncWebRequest(sprintf("http://www.google.com/?q=%s", rand() * 10)); /* 开始同步 */ if ($g->start()) { printf("Request took %f seconds to start ", microtime(true) - $t); while ( $g->isRunning() ) { echo "."; usleep(100); } if ($g->join()) { printf(" and %f seconds to finish receiving %d bytes\n", microtime(true) - $t, strlen($g->data)); } else printf(" and %f seconds to finish, request failed\n", microtime(true) - $t); }
Das obige ist der detaillierte Inhalt vonWie kann ich Multithreading in PHP implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!