服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|R语言|

服务器之家 - 编程语言 - PHP教程 - php多进程中的阻塞与非阻塞操作实例分析

php多进程中的阻塞与非阻塞操作实例分析

2021-10-06 13:23怀素真 PHP教程

这篇文章主要介绍了php多进程中的阻塞与非阻塞操作,结合实例形式分析了php多进程中的阻塞与非阻塞原理、阻塞控制方法与相关操作技巧,需要的朋友可以参考下

本文实例讲述了php多进程中的阻塞与非阻塞操作。分享给大家供大家参考,具体如下:

我们通过pcntl_fork来创建子进程,使用pcntl_wait和pcntl_waitpid来回收子进程。

子进程退出后,父进程没有及时回收,就会产生僵尸进程。

例1:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
define('FORK_NUMS', 5);
$pids = array();
 
//我们创建5个子进程
for($i = 0; $i < FORK_NUMS; ++$i) {
  $pids[$i] = pcntl_fork();
  if($pids[$i] == -1) {
    die('fork error');
  } else if ($pids[$i]) {
    pcntl_wait($status);
  } else {
    echo getmypid() , " {$i} \r\n";
    exit;
  }
}

我们通过for循环fork出5个子进程,父进程会阻塞着等待子进程退出,然后创建下一个子进程。

上述代码输出结果如下:

20081 0
20082 1
20083 2
20084 3
20085 4

但我们创建多进程的目的,就是为了能够并行的处理任务,阻塞的方式并不是我们想看到的。

例2:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
define('FORK_NUMS', 5);
 
$pids = array();
 
//我们创建5个子进程
for($i = 0; $i < FORK_NUMS; ++$i) {
  $pids[$i] = pcntl_fork();
  if($pids[$i] == -1) {
    die('fork error');
  } else if ($pids[$i]) {
    pcntl_wait($status, WNOHANG);
  } else {
    echo getmypid() , " {$i} \r\n";
    exit;
  }
}

我们可以通过设置pcntl_wait的第二个参数为WNOHANG来控制进程是否阻塞。

该函数可以在没有子进程退出的情况下立刻跳出执行后续代码。

  • pcntl_wait等同于以pid为-1调用pcntl_waitpid函数。
  • pcntl_waitpid函数可以等待指定pid的进程。

希望本文所述对大家PHP程序设计有所帮助。

原文链接:https://www.cnblogs.com/jkko123/p/6294602.html

延伸 · 阅读

精彩推荐
  • PHP教程PHP防止跨域提交表单

    PHP防止跨域提交表单

    很简单的PHP防止跨域提交表单,为了安全,这些还是要做的。 ...

    PHP教程网2812020-05-26
  • PHP教程PHP echo()函数讲解

    PHP echo()函数讲解

    今天小编就为大家分享一篇关于PHP echo()函数讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    php参考手册4852019-06-15
  • PHP教程使用XHGui来测试PHP性能的教程

    使用XHGui来测试PHP性能的教程

    这篇文章主要介绍了使用XHGui来测试PHP性能的教程,示例演示基于Ubuntu操作系统,需要的朋友可以参考下...

    PHP教程网2842020-10-30
  • PHP教程PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面

    PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面

    这篇文章主要介绍了PHP的Laravel框架中使用AdminLTE模板来编写网站后台的方法,AdminLTE基于BootStrap,能帮助快速创建网站后台管理面板界面,需要的朋友可以参考...

    stoneworld4812021-01-03
  • PHP教程PHP类中Static方法效率测试代码

    PHP类中Static方法效率测试代码

    因为有好几个项目等着做,又不是很急,再加上目前成型的那些框架多多少少用着总是有点不太如意,所以决定先自己写一个框架,然后再做项目。既然写...

    php教程网2702019-11-11
  • PHP教程php使用curl获取https请求的方法

    php使用curl获取https请求的方法

    这篇文章主要介绍了php使用curl获取https请求的方法,涉及curl针对https请求的操作技巧,非常具有实用价值,需要的朋友可以参考下...

    傲雪星枫5012020-09-04
  • PHP教程php利用cookies实现购物车的方法

    php利用cookies实现购物车的方法

    这篇文章主要介绍了php利用cookies实现购物车的方法,可通过cookie实现对商品的增删改等功能,以及统计与检查等技巧,非常具有实用价值,需要的朋友可以参考...

    PHP编程教程3762020-08-21
  • PHP教程谷歌音乐搜索栏的提示功能php修正代码

    谷歌音乐搜索栏的提示功能php修正代码

    我很喜欢在 google.cn/music 上找 mp3, 因为谷歌音乐在版权方面, 用户体验和搜索功能都做得很好. 但是它的搜索栏提示功能一直存在一个小问题, bug 存在半年以...

    PHP教程网3222019-11-24