php使用多进程

多进程使用场景

多进程一般用来处理消息队列,等数据量比大的任务。

使用限制

php多进程需要pcntlposix扩展支持。可以使用php -m查看是否安装该扩展。
需要注意的是CLI模式和CGI模式时用的php.ini并非同一个配置,需要单独配置。一般情况下使用默认配置即可
php多进程只能运行在CLI环境下,在web服务器环境下会出现无法预期的结果,要慎用!
子进程的个数最好和服务器的核数匹配,子进程超过cpu核数就会存在执行分配问题,所以不建议子进程开得很多。

核心函数

pcntl_fork
创建子进程,一次调用两次返回。在父进程中返回子进程id,在子进程中返回0,创建子进程失败返回-1。所以可以根据返回值判断当前是处于子进程或父进程。
pcntl_waitpid
等待或返回fork的子进程状态,具体参数可以参考文档,我也没有太理解是什么原理,就不多说了。

for($i=0; $i<4; $i++){
    $pid = pcntl_fork();	//创建子进程
    if($pid == -1){
        echo "子进程创建失败".PHP_EOL;
    } elseif($pid){
        //$ppid = posix_getpid();
        //echo "父进程--".$ppid.PHP_EOL;
    } else {
        $pid = posix_getpid();    //获取当前进程id
        $ppid = posix_getppid();  //获取父进程id
        echo "父进程--{$ppid}子进程--".$pid.PHP_EOL;
        exit(); //子进程需要exit,防止子进程继续执行pcntl_fork
    }
}

//等待子进程结束
while(pcntl_waitpid(0, $status) != -1){
    echo "子进程结束了".PHP_EOL;
}

//所有子进程结束
echo "父进程结束".PHP_EOL;

###执行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值