我們在做專案的時候,有些需求,特別是資料的響應處理需要花費大量的時間,由於php是乙個短生命週期的指令碼語言,到了預設的30秒,php的資料處理還沒完成,php的生命週期就結束了。這時需要使用非同步併發處理策略,也就是說,一次php呼叫可以發出的多個請求,這些請求不是按照順序執行,而是可以非同步併發執行的,一些請求用於在後台處理資料,一些請求用於接受後台響應狀態,根據狀態,與使用者做一些簡單的互動。但是問題來了,我們都知道php本身是不支援多執行緒的,那麼應該怎麼實現php的多執行緒呢?
一、php模擬實現多執行緒的三種方法
1、linux下的php多執行緒
下面所講的東西是源自php的pcntl_fork函式.因為這個函式依賴作業系統fork的實現,所以本文所講的東西只適用於linux/unix。那麼先看看這個函式的用法吧.php手冊上是這麼說的:
$pid = pcntl_fork();
if ($pid == -1) else
if ($pid) else
通過pcntl_fork建立乙個子程序,如果返回值是-1的話,那麼說明子程序建立失敗.建立成功的程序id會返回給父程序,0返回給子程序.不好理解吧,所以應該這樣寫:
<?php
$pid = pcntl_fork();
if($pid == -1)
else
else
}?>
這樣一改好理解多了,如果你父程序希望知道子程序正常退出的話,可以加上前面的pcntl_wait。
2.通過stream_socket_client 方式
function sendstream() else
$data = json_encode($send_data[$k]['body']);
$s = stream_socket_client($host . ":80", $errno, $errstr, $timeout, stream_client_async_connect | stream_client_connect);
if ($s) else
} while (count($sockets)) else
} } else
} print_r($result);3、通過多程序代替多執行緒
function daemon(fu
ncna
me, args,
number)
}else
}else
exit();
}} } function worker($args)
daemon(『worker』,array(1),2);
二、真正實現php多執行緒的方法
php真正的多執行緒實現方式,通過安裝php的擴充套件 pthread 可以做到。
php擴充套件
然後重新整理的頁面如下,拖到最底部:
php多執行緒
cd /tools
wget
unzip v2.0.10.zip
cd pthreads-2.0.10
/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config
make
make install
注意:您的php 在編譯的時候需要開啟 –enable-maintainer-zts
/configure --prefix=/usr/local/php --disable-fileinfo
--enable-fpm
--with
-config
-file
-path
=/etc --
with
-config
-file
-scan
-dir
=/etc/php.d --
with
-openssl
--with
-zlib
--with
-curl
--enable-ftp
--with
-gd--
with
-xmlrpc
--with
-jpeg
-dir
--with
-png
-dir
--with
-freetype
-dir
--enable-gd
-native
-ttf
--enable-mbstring
--with
-mcrypt
=/usr/local/libmcrypt --enable-zip
--with
-mysql
=/usr/local/mysql --without-pear
--enable-maintainer
-zts
vim /etc/php.ini
新增extension=pthreads.so
重啟php
/etc/init.d/php-fpm restart
通俗易懂的php多執行緒解決方案
我們在做專案的時候,有些需求,特別是資料的響應處理需要花費大量的時間,由於php是乙個短生命週期的指令碼語言,到了預設的30秒,php的資料處理還沒完成,php的生命週期就結束了。這時需要使用非同步併發處理策略,也就是說,一次php呼叫可以發出的多個請求,這些請求不是按照順序執行,而是可以非同步併發...
通俗易懂的php多執行緒解決方案
我們在做專案的時候,有些需求,特別是資料的響應處理需要花費大量的時間,由於php是乙個短生命週期的指令碼語言,到了預設的30秒,php的資料處理還沒完成,php的生命週期就結束了。這時需要使用非同步併發處理策略,也就是說,一次php呼叫可以發出的多個請求,這些請求不是按照順序執行,而是可以非同步併發...
通俗易懂的程序與執行緒解釋
程序 process 和執行緒 thread 是作業系統的基本概念,但是它們比較抽象,不容易掌握。最近,我讀到一篇材料,發現有乙個很好的模擬,可以把它們解釋地清晰易懂。1.計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。2.假定工廠的電力有限,一次只能供給乙個車間使用。也就...