1. 程式人生 > >[PHP] 簡單多進程並發

[PHP] 簡單多進程並發

實現 worker 分享圖片 php light 多進程 work als r+

企郵搬家進程管理邏輯,經過簡化後的功能實現

<?php
//守護進程
umask(0); //把文件掩碼清0
 
if (pcntl_fork() != 0){ //是父進程,父進程退出
        exit();
}       
 
posix_setsid();//設置新會話組長,脫離終端
 
if (pcntl_fork() != 0){ //是第一子進程,結束第一子進程   
        exit();
}       
 
chdir("/"); //改變工作目錄


//開啟五個子進程
$worker=0;
do {

        for($i=0;$i<6;$i++){
                $pid = pcntl_fork();
                if ($pid == -1) {
                        return false;
                } elseif ($pid == 0) { //子進程,在此處處理業務邏輯

                        //TODO

                        sleep(60);    
                        exit;
                } else { // parent
                        $worker++;
                        if($worker>5){
                                $id = pcntl_wait($status);
                                if ($id > 0) {
                                        $worker--;    
                                }   
                        }   
                }   
        }   
        usleep(200000);

} while (true);

while ($worker > 0) {
        $id = pcntl_wait($status);
        if ($id > 0) {
                $worker--;    
        }   
}

技術分享圖片

  

[PHP] 簡單多進程並發