PHP 多进程、阻塞、及解决方案

这篇博客探讨了PHP的多进程概念,通过pcntl_fork()创建进程,介绍了父进程与子进程的交互。文章提到了阻塞问题,如父进程因等待子进程而可能出现的阻塞现象,讨论了pcntl_wait()函数及其WNOHANG选项来避免阻塞。同时,博主解释了僵尸进程和孤儿进程的区别,并指出init进程如何处理孤儿进程。最后,简单提及了进程间通信的概念。
摘要由CSDN通过智能技术生成

 首先记一下 什么是PHP多进程?

   我觉得就是说,PHP程序运行就是像按照  “一条线一个人”按顺序走下去的。此时只有一个进程。多进程就是在这条线上走的时候, 拉一个人上来,从拉上来他开始,就开始一起往下走,代码,空间,数据都是共享的。

官方例子
手册上的例子

 在 pcntl_fork()函数之后,此时这条线上已经有2个人一起干活了。一个人叫父进程,一个人叫子进程。这个函数的返回值:成功时,在父进程执行线程内返回产生的子进程的PID,在子进程执行线程内返回0。失败时,在 父进程上下文返回-1,不会创建子进程,并且会引发一个PHP错误。

所以 这两个人就开始判断了。我是父进程,我就走到父进程的控制条件分支里去执行,我是子进程就到子进程那个判断分支里去了。

本来是一个人干活,现在有个子进程来帮你了,而且是和你同步去干活的。所以应该会快不少吧。

阻塞

在父进程的最后有一个这个函数,pcntl_wait($status) 手册上也说了,等待子进程中断,防止子进程成为僵尸进程。

如果子进程干活很慢,不就说父进程一直得等着。造成了阻塞。

但是如果你注释掉这个函数,确实不会再等了。但是僵尸进程的危害就无法避免了。

然鹅,这个函数有第二个参

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值