Maison  >  Article  >  développement back-end  >  Comment PHP implémente-t-il la concurrence multithread ?

Comment PHP implémente-t-il la concurrence multithread ?

不言
不言original
2018-07-20 16:55:3515466parcourir

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(&#39;date_default_timezone_set&#39;)) { 
date_default_timezone_set(&#39;PRC&#39;); 
} 
function a() { 
$time = time(); sleep(3); 
$fp = fopen(&#39;result_a&#39;.$time.&#39;.log&#39;, &#39;w&#39;); 
fputs($fp, &#39;Set in &#39; . Date(&#39;h:i:s&#39;, time()) . (double)microtime() . "rn"); 
fclose($fp); 
} 
function b() { 
$time = time(); 
sleep(3); 
$fp = fopen(&#39;result_b&#39;.$time.&#39;.log&#39;, &#39;w&#39;); 
fputs($fp, &#39;Set in &#39; . Date(&#39;h:i:s&#39;, time()) . (double)microtime() . "rn"); 
fclose($fp); 
} 
if(!isset($_GET[&#39;act&#39;])) $_GET[&#39;act&#39;] = &#39;a&#39;; 
if($_GET[&#39;act&#39;] == &#39;a&#39;) { 
a(); 
} 
else if($_GET[&#39;act&#39;] == &#39;b&#39;) 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[&#39;act&#39;] == &#39;run&#39;) { 
echo &#39;start:&#39;; 
runThread(); 
echo &#39; End&#39;; 
}

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&#39;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&#39;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 &#39;oci8&#39; driver if there was no error.
Fixed a bug (#4647) - :doc:`Query Builder <database/query_builder>` method count_all_results() doesn&#39;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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn