【原创】温故而知新,通过一段代码再次深入理解PHP多进程编程

blogdaren 2018-08-30 2评论 370人次

问题背景

先奉上一段PHP多进程示例代码,代码短小,但知识点很丰富,建议先不要看金牛座的运行效果图以及代码解读,自己先看源代码,然后分析运行结果,看看是否和预期的运行效果图一致,关键是要弄明白程序的运行流程,如果不一致,说明还需要进一步的研究学习多进程编程。

代码片段

<?php    
define("START_COLOR", "\033[32m");
define("END_COLOR",   "\033[0m");
$bash_pid = posix_getppid();
$php_pid  = posix_getpid();
echo PHP_EOL . "====== PHP 主程ID:{$php_pid} <---- Bash 主程ID:{$bash_pid}=======";
echo PHP_EOL . PHP_EOL;
$counter = 0;
while($counter < 2) 
{
        $pid = pcntl_fork();
        if($pid == -1)  die('fork error.....');

        if($pid) 
        {
                //父进程逻辑
                $son_pid = pcntl_wait($status); 
                echo PHP_EOL . START_COLOR . "~~~~~~~子进程 {$son_pid} 已退出~~~~~~~";
                echo END_COLOR . PHP_EOL . PHP_EOL;

                $mypid = posix_getpid(); 
                $ppid  = posix_getppid();
                $time  = microtime(true);
                echo "I am parent: pid:{$mypid} <-- ppid:{$ppid}  i:{$counter} {$time} " . PHP_EOL;
        } 
        else 
        {
                //子进程逻辑
                $mypid = posix_getpid();
                $ppid  = posix_getppid();
                $time  = microtime(true);
                echo "I am childs: pid:{$mypid} <-- ppid:{$ppid}  i:{$counter} {$time} " . PHP_EOL;
                //exit; 去掉本行注释再看看会发生什么
        }

        $counter++;
}

效果图预览

33.png

代码解读

1. 如果弄不不明白,请到首页加QQ群呼叫群主......

2. 代码解读将在视频教程中进行分享......

版权声明:除非注明,本文由( blogdaren )原创,转载请保留文章出处。

本文链接:【原创】温故而知新,通过一段代码再次深入理解PHP多进程编程

用户评论:

2018-10-15 12:09
前段时间,我自己也玩了一下多进程,并写了一些东西。https://www.fanhaobai.com/2018/09/process-php-multiprocess-server.html
blogdaren
2018-10-15 12:44
@天翊:写的好认真,太棒了~~

发表评论:

您的昵称:
电子邮件:
个人主页: