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

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

不言
Libérer: 2023-04-03 10:00:01
original
15565 Les gens l'ont consulté

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(); 
?>
Copier après la connexion

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;; 
}
Copier après la connexion

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); } ?>
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal