PHP多程序程式設計

2021-09-06 08:41:46 字數 1535 閱讀 6288

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

) }

}?>

測試程式如下:

<?php

require_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 多的要好幾秒。顯然,採用單個執行緒的方式是...