Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert PHP Multithread-Parallelität?

Wie implementiert PHP Multithread-Parallelität?

不言
不言Original
2018-07-20 16:55:3515509Durchsuche

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(&#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(); 
?>

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[&#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

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&#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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

In Verbindung stehende Artikel

Mehr sehen