PHP的pcntl多程式

技術mix呢發表於2018-01-07

PHP使用PCNTL系列的函式也能做到多程式處理一個事務。比如我需要從資料庫中獲取80w條的資料,再做一系列後續的處理,這個時候,用單程式?你可以等到明年今天了。。。所以應該使用pcntl函式了。

假設我想要啟動20個程式,將1-80w的資料分成20份來做,主程式等待所有子程式都結束了才退出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$max = 800000;
$workers = 20;
 
$pids = array();
for($i = 0; $i < $workers; $i++){
    $pids[$i] = pcntl_fork();
    switch ($pids[$i]) {
        case -1:
            echo "fork error : {$i}
"
;
            exit;
        case 0:
            $param = array(
                `lastid` => $max / $workers * $i,
                `maxid` => $max / $workers * ($i+1),
            );
            $this->executeWorker($input, $output, $param);
            exit;
        default:
            break;
    }
}
 
foreach ($pids as $i => $pid) {
    if($pid) {
        pcntl_waitpid($pid, $status);
    }
}

這裡當pcntl_fork出來以後,會返回一個pid值,這個pid在子程式中看是0,在父程式中看是子程式的pid(>0),如果pid為-1說明fork出錯了。

使用一個$pids陣列就可以讓主程式等候所有程式完結之後再結束了

本文轉自軒脈刃部落格園部落格,原文連結:http://www.cnblogs.com/yjf512/p/3217615.html,如需轉載請自行聯絡原作者


相關文章