Heim > Artikel > Backend-Entwicklung > Wie implementiert PHP Multithread-Parallelität?
PHP unterstützt standardmäßig kein Multithreading. Um die Pthread-Erweiterung zu installieren, müssen Sie PHP mit dem Parameter --enable-maintainer-zts neu kompilieren Der Parameter gibt die Verwendung der Thread-Sicherheit beim Kompilieren von PHP Way an.
<?php if(function_exists('date_default_timezone_set')) { date_default_timezone_set('PRC'); } function a() { $time = time(); sleep(3); $fp = fopen('result_a'.$time.'.log', 'w'); fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn"); fclose($fp); } function b() { $time = time(); sleep(3); $fp = fopen('result_b'.$time.'.log', 'w'); fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn"); fclose($fp); } if(!isset($_GET['act'])) $_GET['act'] = 'a'; if($_GET['act'] == 'a') { a(); } else if($_GET['act'] == 'b') b(); ?>
Der obige Code schreibt eine Datei lokal.
PHP-Multithread-Lese- und Schreibdateien:
Wenn Sie localhost/a.php besuchen und so schnell wie möglich zwei Browser-Registerkarten gleichzeitig öffnen, werden Sie feststellen, dass der Unterschied darin liegt Die Erstellungszeit der beiden Dateien beträgt 3 Sekunden.
Aber wenn Sie localhost/a.php?act=b und einen weiteren Besuch von/a.php?act=a besuchen, werden Sie feststellen, dass die Erstellungszeit der zwei Dateien sind fast gleich.
Für Apache bedeutet dieselbe URL einen Thread (oder Prozess), aber unterschiedliche URLs bedeuten, dass er gleichzeitig sein kann.
Wenn es eine Download-Aktion in PHP gibt
function runThread() { down("http://localhost/test/a.php?act=a"); } if($_GET['act'] == 'run') { echo 'start:'; runThread(); echo ' End'; }
http://localhost/test/a.php?act=run
http://localhost/test/ a .php?act=run&s=2
Solange die von den Hauptbenutzern besuchten URLs unterschiedlich sind, handelt es sich um unterschiedliche Prozesse, was Parallelität bedeutet. Die Dateierstellungszeit beträgt nicht 3 Sekunden
Freunde, die einen lokalen Linux-Server haben, können auch Linux verwenden, um Parallelität zu simulieren
<?php for ($i=0;$i<10;$i++) { echo $i; sleep(5); } ?>
Speichern Sie das Obige als test.php und schreiben Sie dann einen SHELL-Code
#!/bin/bash for i in 1 2 3 4 5 6 7 8 9 10 do php -q test.php & done Fixed a bug where :doc:`Image Manipulation Library <libraries/image_lib>` didn't escape image source paths passed to ImageMagick as shell arguments. Fixed a bug (#861) - :doc:`Database Forge <database/forge>` method create_table() incorrectly accepts field width constraints for mssql/SQLSRV integer-type columns. Fixed a bug (#4562) - :doc:`Cache Library <libraries/caching>` didn't check if Memcached::quit() is available before calling it. Fixed a bug (#4563) - :doc:`Input Library <libraries/input>` method request_headers() ignores $xss_clean parameter value after first call. Fixed a bug (#4605) - :doc:`Config Library <libraries/config>` method site_url() stripped trailing slashes from relative URIs passed to it. Fixed a bug (#4613) - :doc:`Email Library <libraries/config>` failed to send multiple emails via SMTP due to "already authenticated" errors when keep-alive is enabled. Fixed a bug (#4633) - :doc:`Form Validation Library <libraries/form_validation>` ignored multiple "callback" rules for empty, non-required fields. Fixed a bug (#4637) - :doc:`Database <database/index>` method error() returned FALSE with the 'oci8' driver if there was no error. Fixed a bug (#4647) - :doc:`Query Builder <database/query_builder>` method count_all_results() doesn't take into account GROUP BY clauses while deciding whether to do a subquery or not. Fixed a bug where
Verwandte Empfehlungen:
PHP implementiert Multithreading, PHP-Multithreading
Das obige ist der detaillierte Inhalt vonWie implementiert PHP Multithread-Parallelität?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!