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

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

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

PHP 多进程、阻塞、及解决方案_第1张图片 手册上的例子

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

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

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

阻塞

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

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

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

然鹅,这个函数有第二个参数: pcntl_wait($status,WNOHANG)  说是不等了不阻塞了。这像什么样子嘛。

阻塞就这样解决了吗?不造啊。还没写代码验证,僵尸进程避免了吗?不造啊。

PHP 多进程、阻塞、及解决方案_第2张图片

按照预想: 父进程会先生成文件,60秒之后,子进程会生成文件。而且父进程不会被阻塞。

 

生成文件2个

       目前看起来 好像是这样的。

        但是 僵尸进程还有么有?  还有没有其他问题?

       不造啊。

僵尸进程与孤儿进程

    僵尸进程与孤儿进程怎么理解? 我觉得就是,谁先死的问题。父进程先死了嘛,我可怜的子进程呀,没了爹可不成了孤儿进程了嘛。僵尸进程就不一样了! 我都死了,但是呢,我那个爹呀他还不管我,我可不得变成僵尸嘛报复社会嘛!(僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程

     危害:僵尸危害就不用说了,反正我也没遇到过。而孤儿进程:(但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init 来接管他,成为他的父进程。)init说,没关系!我是你们在坐的爹。过继过来吧 孩子们。init会处理,我们就不用处理这些野孩子了。

  进程间通信

   什么是进程间通信,不就是说,不同进程之间来来回传递消息吗?

    老弟在吗?

     滚!

   就是这样吧。

明天再研究

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(PHP)