环球科创网

2022年01月04日整理发布:解析PHP多进程编程

更新时间:2022-01-04 15:39:17

导读 我将告诉你一些关于解析PHP多进程编程的事情。相信朋友们也应该密切关注这个话题。现在,让我们为我的朋友们谈谈解析PHP多进程编程。边肖还

我将告诉你一些关于解析PHP多进程编程的事情。相信朋友们也应该密切关注这个话题。现在,让我们为我的朋友们谈谈解析PHP多进程编程。边肖还收集了关于解析PHP多进程编程的相关信息。我希望你看到后会喜欢。

建议:《PHP视频教程》

PHP多进程编程

使用多个进程的优势:

1.使用多进程,内核将负责在子进程结束后回收资源。

2.使用多个进程,子进程的异常退出不会导致整个进程Thread退出。父进程仍然有机会重建进程。

3.一个常驻的主流程,只负责任务分配,逻辑比较清晰。多进程的《我们走》是用PHP实现的。

我们需要安装pcnt扩展。

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

a09805475dda0c9d322963fe13e1a6b.png

使用pcntl_fork函数创建子流程

pcntl_fork的功能是创建与当前进程相同的子进程。该子流程代码段与当前流程完全相同,但有自己的数据段。看看创建子流程的最简单方法:

?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

/**

*河东

* @日期2017-04-03

*/

$ parentPid=getmypid//获取父进程id $ childPid=pcntl _ fork//创建子进程开关($ ChildPid){ 0

案例-1:

打印“未能创建子进程!”。PHP _ EOL

退出;

案例0:

打印‘我是孩子’流程。进程标识:{$ childpid} '。PHP _ eol

打破;

默认值:

打印“我是父进程进程标识:{$ parentpid},子进程标识: {$childPid}”。PHP _ EOL

}

?pcntl_fork成功调用后,一个程序变成两个程序:一个程序得到的$pid变量值为0,是一个子过程;另一个程序获得的$pid的值大于0。该值是父进程的子进程的PID。输出:

2a00f0a4daef8e2fdf91cd504a8918f.png

子流程回收

阻塞模式才有ps?一般我都习惯用ps aux加grep命令来查找正在运行的后台进程。STAT的一列标识每个进程的运行状态。这里我们关注状态Z:僵尸。当子进程先于父进程退出,而父进程对此不采取任何措施时,子进程将成为僵尸进程。僵尸进程占用内存不多,但是很碍眼。(别忘了他们还占着PID)

一般来说,在父进程结束之前回收死的子进程就足够了。在pcntl扩展中,有一个pcntl_wait函数等待进程结束,然后回收已完成的进程。

?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

/**

*河东

* @日期2017-04-03

*/

$ parentPid=getmypid//获取父进程id $ childPid=pcntl _ fork//创建子进程开关($ ChildPid){ 0

案例-1:

打印“未能创建子进程!”。PHP _ EOL

退出;

案例0:

打印‘我是孩子’流程。进程标识:{$ childpid} '。PHP _ eol

打破;

默认值:

pcntl _ wait($ status);//父进程打印“我是父进程进程标识:{$ ParentPID},子进程标识: {$childPid}”。PHP _ EOL

非阻塞模式阻塞模式失去了多个进程的并行性。还有另一种方法可以回收已完成的子流程,并对它们进行并行处理。这是非阻塞方式。

?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

/**

*河东

* @日期2017-04-03

*/

for($ I=1;$ I=5;$ I){ 0

$ pid=pcntl _ fork//创建子进程

if(!$ PID){ 0

睡眠(1);

打印“In child $ I \ n”;

出口($ I);

}

}

//pcntl_waitpid第一个参数为0,表示处理所有子进程。

while (pcntl_waitpid(0,$status)!=-1) {

$ status=pcntl _ wexit status($ status);

回应“子$状态已完成\ n”;

}如果父进程先挂起怎么办?

会发生什么?什么都不会发生。子流程仍在运行。但此时子流程会交给流程1,流程1会成为这些子流程的继父。1号流程会很好的处理这些流程的资源,完成后1号流程会自动回收资源。所以处理僵尸进程的另一个临时方法是关闭它们的父进程。

最后一点:

流程控制不能应用在Web服务器环境中,在Web服务环境中使用可能会带来意想不到的结果。-摘自PHP手册

参考:

http://www .用PHP进行黑客攻击。com/16/1/3/get-in多处理

http://www.jb51.net/article/71232.htm

http://www.laruence.com/2009/06/11/930.html

http://imhuchao.com/596.html

https://www。纯粹的韦伯。com/article/PHP-多进程-编程-预览/以上就是解析服务器端编程语言(专业超文本预处理器的缩写)多进程编程的详细内容!

来源:php中文网

免责声明:本文由用户上传,如有侵权请联系删除!