PHP ne prend pas en charge le multi-threading par défaut. Pour utiliser le multi-threading, vous devez installer l'extension pthread, vous devez utiliser le paramètre --enable-maintainer-zts pour recompiler PHP. Le paramètre spécifie l'utilisation de la sécurité des threads lors de la compilation de PHP Way.
<?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(); ?>
Le code ci-dessus écrit un fichier localement.
Fichiers de lecture et d'écriture multithread PHP :
Si vous visitez localhost/a.php et ouvrez deux onglets de navigateur en même temps le plus rapidement possible, vous constaterez que la différence entre le temps de création des deux fichiers est de 3 secondes
Mais si vous visitez localhost/a.php?act=b et une autre visite/a.php?act=a vous constaterez que le temps de création du fichier. deux fichiers sont presque identiques.
Pour Apache, la même URL signifie un thread (ou un processus), mais des URL différentes signifient qu'il peut être simultané.
S'il y a une action de téléchargement dans php
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
Tant que les URL visitées par les principaux utilisateurs sont différentes, elles sont considérées comme des processus différents, ce qui signifie concurrence. Le temps de création du fichier n'est pas de 3 secondes
Les amis qui ont un serveur Linux local peuvent également utiliser Linux pour simuler la concurrence
<?php for ($i=0;$i<10;$i++) { echo $i; sleep(5); } ?>
Enregistrez ce qui précède sous test.php, puis écrivez un 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
Recommandations associées :
php implémente le multi-threading, php multi-threading
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!