资讯专栏INFORMATION COLUMN

php创建恒定数量的进程(pcntl学习笔记三)

hizengzeng / 1361人阅读

摘要:最近在学习进程相关的知识,配合实际编码,觉得有点意思。闲话不说了,进入正题,受网友启发,如何创建恒定数量的进程呢有进程挂了,就创建新的,进程,进程多了就杀掉几个。

最近在学习进程相关的知识,配合实际编码,觉得有点意思。这段时间工作不忙,有时间自己研究进步,感觉这才是真正的工作啊。相比上一家公司(压抑的工作饱和度……)感觉开心很多。下一步再研究一下多线程。看看能不能插入一千万条数据。
闲话不说了,进入正题,受网友启发,如何创建恒定数量的进程呢?有进程挂了,就创建新的,进程,进程多了就杀掉几个。网友文章:16岁的鸣人发送影分身,分出5个分身
code如下:

 0) {
        return $pid;
    }
    return 0;
}


while(true) {
    if (count($child) < $num) {
        $pid = genarate($minLife, $maxLife);
        echo "child ".$pid." born ".PHP_EOL;
        if($pid) {
            $child[] = $pid;
        }
    } else if ( count($child) > $num ) {
        $pid = array_pop($child);
        posix_kill($pid,SIGINT);
        echo "child ".$pid." killed".PHP_EOL;
    }
    foreach($child as $k => $pid) {
        $res = pcntl_waitpid($pid,$status,WNOHANG);
        if($res == -1 || $res > 0 ) {
            unset($child[$k]);
        }
    }
}

当$num=1,$maxLife=1,$minLife=1时
运行结果如下

只要进程一挂掉,就会里面创建新的进程。再通过pcntl_signal注册一个捕获信号的回调方法,应该就可以了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22718.html

相关文章

  • php进程插入数据(pcntl 学习笔记二)

    摘要:进程切换太多,影响了了效率应该是原因之一。当时,十万条记录,个进程插入总时间为单进程插入万条数据,耗时秒,相对个进程插入万记录来说,耗时少些。而单进程插入万条记录,耗时,相对来说,是挺慢的了。 个人在虚拟机centos7,单核,1G内存 /** * 模拟并发请求,10万次写入数据库 * 拆分为10个进程,每个进程处理一万条插入 */ $total = 10000; $num ...

    CoyPan 评论0 收藏0
  • pcntl扩展学习笔记一(pcntl_fork与pcntl_wait,串行执行分析)

    摘要:对编程的理解,应该到深入到操作系统级别。进程控制,我一直都没有接触,感觉好高端,今天啃了一下扩展的最简单的两个函数,有点心得,记录一下吧,欢迎抛砖。 对编程的理解,应该到深入到操作系统级别。进程控制,我一直都没有接触,感觉好高端,今天啃了一下pcntl扩展的最简单的两个函数,有点心得,记录一下吧,欢迎抛砖。新建代码文件 pcntl_wait.php,如下: $i = 0; ...

    TesterHome 评论0 收藏0
  • PHPpcntl进程控制教程(多进程消费模型)

    摘要:多进程消费模型父进程等待并控制子进程的退出思路整理父进程开启后,直接获取到子进程的,然后存入数组,子进程出来后直接开启业务消费代码,然后退出,然后父进程等待子进程退出,全部退出后父进程结束代码请在模式下运行子进程的数量如果是资源类型的变量, 多进程消费模型 父进程等待并控制子进程的退出 思路整理 父进程开启后,直接获取到子进程的pid,然后存入child数组,子进程fork出来后直接开...

    617035918 评论0 收藏0
  • workerman笔记-php创建守护进程

    摘要:守护进程常常在系统引导装入时启动,在系统关闭时终止。进程组有进程组来唯一标识。且该进程组不会因组长进程的退出而受到影响。 使用函数 pcntl_fork();//创建子进程 posix_setsid();//设置当前进程为进程组长 posix_getpid();//获取进程id 例子 workerman中将进程 /** * Run as deamon mode. * * @th...

    Cristic 评论0 收藏0
  • PHP进程系列笔记(一)

    摘要:用于创建子进程。该函数阻塞当前进程,只到当前进程的一个子进程退出或者收到一个结束当前进程的信号。注意处需要注意子进程需要防止子进程也进入循环。如果没有,最终创建的子进程不只个。 本系列文章将向大家讲解pcntl_*系列函数,从而更深入的理解进程相关知识。 PCNTL在PHP中进程控制支持默认是关闭的。您需要使用 --enable-pcntl 配置选项重新编译PHP的 CGI或CLI版本...

    ddongjian0000 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<