• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP的pcntl进程控制之多进程消费模型

php 搞代码 4年前 (2022-01-21) 42次浏览 已收录 0个评论
文章目录[隐藏]

这篇文章主要介绍了关于PHP的pcntl进程控制之多进程消费模型,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

多进程消费模型

父进程等待并控制子进程的退出

思路整理

父进程开启后,直接获取到子进程的pid,然后存入child数组,子进程fork出来后直接开启业务消费代码,然后exit(0)退出,然后父进程pcntl_wait等待子进程退出,全部退出后父进程结束

代码

const NEWLINE = "\n\n";if (strtolower(php_sapi_name()) != 'cli') {    die("请在cli模式下运行");}$bizPath = "./childBiz/";if (!is<span style="color:transparent">本文来源gaodai#ma#com搞*!代#%^码$网!</span><strong>搞代gaodaima码</strong>_dir($bizPath)) {    @mkdir($bizPath, 0755, true);}$child = [];$index = 0;$loop = 10; //子进程的数量//如果是资源类型的变量,父子进程会共享//$f = fopen("./pcntl_fork_2.php", "r");while ($index < $loop) {    echo "当前进程:" . getmypid() . NEWLINE;    $pid = pcntl_fork(); //fork出子进程    //fork后父进程会走自己的逻辑,子进程从处开始走自己的逻辑,堆栈信息会完全复制给子进程内存空间,父子进程相互独立    if ($pid == -1) { // 创建错误,返回-1        die('进程fork失败');    } else if ($pid) { // $pid > 0, 如果fork成功,返回子进程id        //获取创建的子进程        $child[$pid] = $pid;        echo "{$pid} child create!" . microtime(true) . NEWLINE;    } else { // $pid = 0        // 子进程逻辑        $sleepTime = rand(5, 18);        sleep($sleepTime);        $time = microtime(true);        file_put_contents($bizPath.getmypid().".log", $time . ":" . $index . PHP_EOL, FILE_APPEND);        exit(0);    }    $index++;}while (count($child)) {    //阻塞等待    $pid = pcntl_wait($status);    $time = microtime(true);    file_put_contents("./father.log", $time . ":" . $pid . ":" . $status . PHP_EOL, FILE_APPEND);    if ($pid > 0) {        unset($child[$pid]);    }    if ($pid == -1) {        unset($child);    }//    foreach ($child as $k => $pid) {//        //不阻塞循环判断 WNOHANG表示如果没有子进程退出立刻返回//        $res = pcntl_waitpid($pid, $status, WNOHANG);//        $time = microtime(true);//        file_put_contents("./father.log", $time . ":" . $pid . ":" . $res . ":" . $status . PHP_EOL, FILE_APPEND);//        if (-1 == $res || $res > 0) {//            unset($child[$k]);//        }//    }}//fclose($f);//主进程退出exit(0);

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请随时关注我们网站!

相关推荐:

PHP的pcntl进程控制之pcntl_wait

PHP的pcntl进程控制之pcntl_fork

以上就是PHP的pcntl进程控制之多进程消费模型的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP的pcntl进程控制之多进程消费模型

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址