如何解析PHP多进程编程

  介绍

这篇文章主要介绍了如何解析PHP多进程编程,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。


PHP多进程编程

使用多进程的优点:

,,,,1只使用多进程,,子进程结束以后,,内核会负责回收资源   ,,,2只使用多进程,子进程异常退出不会导致整个进程线程退出只父进程还有机会重建流程。   ,,,3只一个常驻主进程,,只负责任务分发,,逻辑更清楚。

PHP中实现多进程,让# 39;年代。

我们需要安装资金扩展

pcntl是过程控制的缩写,通常,php会默认安装这个扩展。使用phpinfo()函数查看扩展是否存在。

如何解析php多进程编程

使用pcntl_fork()函数创建子进程

pcntl_fork作用就是创建和当前进程一样的子进程,这个子进程代码段和当前进程一模一样,但是拥有自己的数据段。看一个最简单的创建子进程的方法:

& lt; php ?/* *   ,*河东   ,* @date  2017-04-03   ,*/$ parentPid =, getmypid();,//,获取父进程id  childPid 美元;=,pcntl_fork();,//,创建子进程,开关(childPid美元),{   ,,,case  1:   ,,,,,,,print “创建子进程失败!“.PHP_EOL;   ,,,,,,,退出;   ,,,case  0:   ,,,,,,,print “我是子进程,进程ID: {$ childPid}“.PHP_EOL;   ,,,,,,,休息;   ,,,默认值:   ,,,,,,,print “我是父进程,进程ID: {$ parentPid},子进程ID:, {$ childPid}“.PHP_EOL;   }   ?在 pcntl_fork()调用成功以后,一个程序变成了两个程序:一个程序得到的美元pid变量值是0,它是子进程;另一个程序得到的pid的美元值大于0,这个值是子进程的pid,它是父进程。

输出结果:

如何解析php多进程编程

子进程回收

①阻塞方式
刚刚有ps么?一般我习惯用ps辅助加上grep命令来查找运行着的后台进程。其中有一列统计,标识了每个进程的运行状态。这里,我们关注状态Z:僵尸(僵尸)。当子进程比父进程先退出,而父进程没对其做任何处理的时候,子进程将会变成僵尸进程。僵尸进程虽然不占什么内存,但是很碍眼。(别忘了它们还占用着pid)

一般来说,在父进程结束之前回收挂掉的子进程就可以了。在pcntl扩展里面有一个pcntl_wait()函数,通过这个方法等待进程结束,然后回收已经结束的进程。

& lt; php ?/* *   ,*河东   ,* @date  2017-04-03   ,*/$ parentPid =, getmypid();,//,获取父进程id  childPid 美元;=,pcntl_fork();,//,创建子进程,开关(childPid美元),{   ,,,case  1:   ,,,,,,,print “创建子进程失败!“.PHP_EOL;   ,,,,,,,退出;   ,,,case  0:   ,,,,,,,print “我是子进程,进程ID: {$ childPid}“.PHP_EOL;   ,,,,,,,休息;   ,,,默认值:   ,,,,,,,pcntl_wait(美元地位);,//,子进程执行完后才执行父进程,,,,,,,,,print “我是父进程,进程ID: {$ parentPid},子进程ID:, {$ childPid}“.PHP_EOL;   }

②非阻塞方式
阻塞方式失去了多进程的并行性。还有一种方法,既可以回收已经结束的子进程,又可以并行。这就是非阻塞的方式。

& lt; php ?/* *   ,*河东   ,* @date  2017-04-03   ,*/for ($小姐:=1;祝福;美元小姐:& lt;=, 5,, + + $ i), {   ,,,pid 美元;=,pcntl_fork();,//,创建子进程      ,,,if  (! $ pid), {   ,,,,,,,睡眠(1);   ,,,,,,,print “拷贝child  $ i \ n";   ,,,,,,,退出($ i);   ,,,}   }//,pcntl_waitpid 第一个参数为,0,代表处理全部子进程      while  (pcntl_waitpid(0,,美元地位),!=,1),{   ,,,status 美元;=,pcntl_wexitstatus(美元地位);   ,,,echo “Child  status 美元;\ n"完成;;   }

如果父进程先挂了怎么办?

会发生什么?什么也不会发生,子进程依旧还在运行。但是这个时候,子进程会被交给1号进程,1号进程成为了这些子进程的继父。1号进程会很好地处理这些进程的资源,当它们结束时1号进程会自动回收资源,所以,另一种处理僵尸进程的临时办法是关闭它们的父进程。

感谢你能够认真阅读完这篇文章,希望小编分享的“如何解析PHP多进程编程”这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

如何解析PHP多进程编程