您好,欢迎访问一九零五行业门户网

PHP的Pcntl多进程扩展的用法介绍

本篇文章给大家带来的内容是关于php的pcntl多进程扩展的用法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
php提供了一个pcntl扩展,pcntl基于linux的进程,windows系统暂时没有这个扩展,用于实现基础的多进程实现,可以利用这个处理一个很耗时的任务,例如发订阅邮件,短信,站内信等。
示例代码:
代码是基于laravel 框架的,建议使用此框架来允许这部分代码。
public function index(request $request)    {        pcntl_signal(sigchld, sig_ign); //如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。          $max = 8000;        $workers = 10;                $pids = array();        for($i = 0; $i < $workers; $i++){ $pids[$i] = pcntl_fork(); $pid = posix_getpid(); switch ($pids[$i]) { case -1: echo "fork error : {$i} \r\n"; exit; case 0: $param = array( 'lastid' => $max / $workers * $i,                        'maxid' => $max / $workers * ($i+1),                    );                    $this->dosomething($pid, $param);                    exit;                default:                    break;            }        }                foreach ($pids as $i => $pid) {            if($pid) {                //父进程会得到子进程号,所以这里是父进程执行的逻辑                  //如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成:                  pcntl_wait($status,wnohang); //等待子进程中断,防止子进程成为僵尸进程。                //pcntl_waitpid($pid, $status);            }        }    }// 可以看到那个子进程在处理哪些数据    public function dosomething($filename, $param)    {        for ($i = $param['lastid']; $i < $param['maxid']; $i++) {            $path = ./test/;            if (!is_dir($path)){                mkdir($path, 0777, true);            }            $content = $i . '|';            $file = $path . $filename . .txt;            file_put_contents($file, $content, file_append);        }    }
更多建议读文档,进程和线程,还有很多内容的,需要读书去学习了
以上就是php的pcntl多进程扩展的用法介绍的详细内容。
其它类似信息

推荐信息