1. 程式人生 > 實用技巧 >php使用多程序

php使用多程序

多程序使用場景

多程序一般用來處理訊息佇列,等資料量比大的任務。

使用限制

php多程序需要pcntlposix擴充套件支援。可以使用php -m檢視是否安裝該擴充套件。
需要注意的是CLI模式和CGI模式時用的php.ini並非同一個配置,需要單獨配置。一般情況下使用預設配置即可
php多程序只能執行在CLI環境下,在web伺服器環境下會出現無法預期的結果,要慎用!
子程序的個數最好和伺服器的核數匹配,子程序超過cpu核數就會存在執行分配問題,所以不建議子程序開得很多。

核心函式

pcntl_fork
建立子程序,一次呼叫兩次返回。在父程序中返回子程序id,在子程序中返回0,建立子程序失敗返回-1。所以可以根據返回值判斷當前是處於子程序或父程序。
pcntl_waitpid


等待或返回fork的子程序狀態,具體引數可以參考文件,我也沒有太理解是什麼原理,就不多說了。

for($i=0; $i<4; $i++){
    $pid = pcntl_fork();	//建立子程序
    if($pid == -1){
        echo "子程序建立失敗".PHP_EOL;
    } elseif($pid){
        //$ppid = posix_getpid();
        //echo "父程序--".$ppid.PHP_EOL;
    } else {
        $pid = posix_getpid();    //獲取當前程序id
        $ppid = posix_getppid();  //獲取父程序id
        echo "父程序--{$ppid}子程序--".$pid.PHP_EOL;
        exit(); //子程序需要exit,防止子程序繼續執行pcntl_fork
    }
}

//等待子程序結束
while(pcntl_waitpid(0, $status) != -1){
    echo "子程序結束了".PHP_EOL;
}

//所有子程序結束
echo "父程序結束".PHP_EOL;

執行結果