首頁  >  文章  >  後端開發  >  php多執行緒並發實作方法

php多執行緒並發實作方法

高洛峰
高洛峰原創
2016-12-21 11:43:481372瀏覽

本文實例講述了php多執行緒並發實作方法。分享給大家供大家參考,具體如下:

java裡多執行緒就是一個new thread的事情,php依賴apache靠著linux底層有一個多執行緒的辦法。

這裡就來說說如果你無法操控apache的伺服器,如何模擬php並發

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

   

以上程式碼,在本地寫入一個檔案。

如果你訪問localhost/a.php 在兩個瀏覽器標籤盡可能快的同時打開,發現兩個文件創建時間相差為3秒

但是如果你訪問localhost/a.php?act=b 另一個訪問/a.php?act=a 你發現兩個檔案創建的時間幾乎差不多。

對於apache來說同樣的url意味著一個執行緒(我們或說是進程),但是不同的URL意味著可以並發。

如果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

只要主訪問的url不同,則認為是不同的進行,意味著並發。檔案建立時間不為3秒

本地有Linux伺服器的朋友也可以藉助linux來進行模擬並發

<?php
for ($i=0;$i<10;$i++) {
echo $i;
sleep(5);
}
?>

   

上面存成test.php,本文所述對大家PHP程式設計有所幫助。

更多php多執行緒並發實作方法相關文章請關注PHP中文網!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn