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


Posted in PHP onMarch 04, 2020

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

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

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

例1:

<?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:

<?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程序设计有所帮助。

PHP 相关文章推荐
NOT NULL 和NULL
Jan 15 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
Aug 01 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
Jan 17 PHP
查找php配置文件php.ini所在路径的二种方法
May 26 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
Jan 08 PHP
php格式化json函数示例代码
May 12 PHP
php简单截取字符串代码示例
Oct 19 PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 PHP
PHP编程计算日期间隔天数的方法
Apr 26 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
May 06 PHP
PHP进阶学习之Geo的地图定位算法详解
Jun 19 PHP
php实现对文件压缩简单的方法
Sep 29 PHP
php 中的信号处理操作实例详解
Mar 04 #PHP
php libevent 功能与使用方法详解
Mar 04 #PHP
php+iframe 实现上传文件功能示例
Mar 04 #PHP
php实现文件上传基本验证
Mar 04 #PHP
PHP实现文件上传操作和封装
Mar 04 #PHP
PHP实现文件上传后台处理脚本
Mar 04 #PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
Mar 03 #PHP
You might like
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
PHP实现图片简单上传
2006/10/09 PHP
PHP自动识别字符集并完成转码详解
2013/08/02 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
2014/10/20 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
PDO::query讲解
2019/01/29 PHP
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
2020/05/14 Javascript
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
深入理解python多进程编程
2016/06/12 Python
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
Python3.6简单操作Mysql数据库
2017/09/12 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
地理科学专业毕业生求职信
2013/10/15 职场文书
五四青年节的活动方案
2014/08/20 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
延安红色之旅心得体会
2014/10/07 职场文书
讲座开场白台词和结束语
2015/05/29 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS