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 相关文章推荐
Godaddy空间Zend Optimizer升级方法
May 10 PHP
input file获得文件根目录简单实现
Apr 26 PHP
使用php计算排列组合的方法
Nov 13 PHP
php获取客户端电脑屏幕参数的方法
Jan 09 PHP
PHP开启opcache提升代码性能
Apr 26 PHP
php开发中的页面跳转方法总结
Apr 26 PHP
php实现上传图片文件代码
Jul 19 PHP
php实现编辑和保存文件的方法
Jul 20 PHP
php使用pear_smtp发送邮件
Apr 15 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
Jun 09 PHP
php无限级评论嵌套实现代码
Apr 18 PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 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
详解CSS样式中的 !important * _ 符号
2021/03/09 HTML / CSS
复制js对象方法(详解)
2013/07/08 Javascript
深入理解Javascript动态方法调用与参数修改的问题
2013/12/10 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
js实现背景图片感应鼠标变化的方法
2015/02/28 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
2017/03/28 Javascript
利用js实现前后台传送Json的示例代码
2018/03/29 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
2018/11/02 Javascript
vue 移动端适配方案详解
2018/11/15 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
pyv8学习python和javascript变量进行交互
2013/12/04 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
Django中modelform组件实例用法总结
2020/02/10 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
POP文化和音乐灵感的时尚:Hot Topic
2019/06/19 全球购物
餐厅总经理岗位职责
2013/12/31 职场文书
原材料检验岗位职责
2014/03/15 职场文书
行政办公室岗位职责
2014/03/18 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技