php本身不支援多執行緒,多程序支援的也不是特別好,網上找到乙份多程序**(寫了乙個測試程式簡單測了一下,可以執行,但是離上線還差得很遠。
<?php/*** project: signfork: php多執行緒庫
* file: signfork.class.php */
class
signfork
if(is_array($arg
))
$spawns['total']=$i
; }
elseif($spawns=intval($arg
)) }
else
if($i>1000) exit('too many spawns!');
return
$this->request($spawns
); }
/*** signfork主程序控制方法
* 1、$tmpfile 判斷子程序檔案是否存在,存在則子程序執行完畢,並讀取內容
* 2、$data收集子程序執行結果及資料,並用於最終返回
* 3、刪除子程序檔案
* 4、輪詢一次0.03秒,直到所有子程序執行完畢,清理子程序資源
* @param string|array $arg 用於對應每個子程序的id
* @return array 返回 array([子程序序列]=>[子程序執行結果]);
*/private
function request($spawns
)
return
$data
; }
/*** signfork子程序執行方法
* 1、pcntl_fork 生成子程序
* 2、file_put_contents 將'$obj->__fork($val)'的執行結果存入特定序列命名的文字
* 3、posix_kill殺死當前程序
* @param object $obj 待執行的物件
* @param object $i 子程序的序列id,以便於返回對應每個子程序資料
* @param object $param 用於輸入物件$obj方法'__fork'執行引數
*/private
function spawn($obj,$i,$param=null
) }
}?>
測試程式如下:
<?phprequire_once(dirname(__file__) . '/signfork.class.php');
class
execobj
}echo
getmypid()."\n";
$signfork = new
signfork();
$result = $signfork->run(new execobj(),5);
foreach ($result
as$key=>$val
)?>
php 多程序程式設計
第一步 php m 命令檢視php是否安裝pcntl 和 posix擴充套件,若沒有則安裝使用場景 1.要進行大量的網路耗時的操作 2.要做大量的運算,並且,系統有多個cpu,為了讓使用者有更快的體驗,把乙個任務,分成幾個小任務,最後合併。多程序常用函式 pcntl alarm 為程序設定乙個ala...
PHP多程序程式設計(一)
雖然php 中,多程序用的比較的少。但是畢竟可能是會用到了。我最近就遇到這樣乙個問題,使用者提交幾百個url以後,要讀出這個url 中的標題。當然,你不希望使用者等待的太久,10s 鐘應該給出個答案。但是,本身,你要獲取乙個url 的標題,少的要 0.1s 多的要好幾秒。顯然,採用單個執行緒的方式是...
PHP多程序程式設計(一)
雖然php 中,多程序用的比較的少。但是畢竟可能是會用到了。我最近就遇到這樣乙個問題,使用者提交幾百個url以後,要讀出這個url 中的標題。當然,你不希望使用者等待的太久,10s 鐘應該給出個答案。但是,本身,你要獲取乙個url 的標題,少的要 0.1s 多的要好幾秒。顯然,採用單個執行緒的方式是...