前言

在服务器跑脚本时,避免不了一些耗时任务,使用多进程是必不可少的。而在 PHP5.5 之后,PHP 开始加入了多进程元素,以满足开发需求。

注意实现多进程需要开启的扩展:pcntl、 posix。

Windows 环境下不支持 PHP 的多进程编程,本文主要在 Linux 环境下开发测试

一张简单结构图

多进程示意图

主要功能主要参考官方文档 进程控制pcntl_fork:创建多进程,调用后会返回两条进程的pid,0 为子进程,大于 0 为父进程(父进程得到子进程的 id,所以大于 0),-1为创建失败$pid = $pcntlInstall ? pcntl_fork() : 0;if ($pid == -1) {    //fork失败

} elseif ($pid > 0) {    //父进程

......

} elseif ($pid == 0) {    //子进程

......

}pcntl_signal: 注册一个信号处理回调函数,可以捕获子进程结束时发出的信号/配合pcntl_signal使用declare (ticks = 1);//当子进程退出时,会触发该函数,当前子进程数-1pcntl_signal(SIGCHLD, function ($signo) {    switch ($signo) {        case SIGCHLD:            echo $curChildPro . 'SIGCHLD', PHP_EOL;

$curChildPro--;            break;

}

});pcntl_wait: 用来暂停父进程,等待子进程退出

一个多进程的例子该例子主要介绍了如何控制 同一时刻 进程 并发 的数量$curChildPro = 0;

$maxChildPro = 5;  // 同一时刻最多 5 个进程

//配合pcntl_signal使用declare (ticks = 1);//当子进程退出时,会触发该函数,当前子进程数-1pcntl_signal(SIGCHLD, function ($signo) {    global $curChildPro;    switch ($signo) {        case SIGCHLD:            echo $curChildPro . 'SIGCHLD', PHP_EOL;

$curChildPro--;            break;

}

});

$index  = 0;while ($index

$index ++;

$curChildPro++;    echo "-------- current process" . $curChildPro . "--------\r\n";

$pid = $pcntlInstall ? pcntl_fork() : 0;

if ($pid == -1) {        //fork失败

} elseif ($pid > 0) {        //达到上限时父进程阻塞等待任一子进程退出后while循环继续

if ($curChildPro >= $maxChildPro) {

pcntl_wait($status);

}

} elseif ($pid == 0) {        //子进程   执行一些操作

......        exit(); // 需要退出,避免产生僵尸进程

}

}

作者:Katoo

链接:https://www.jianshu.com/p/f03b6308a4a3

php 子进程_PHP 多进程入门相关推荐

  1. 韩顺平php可爱屋源码_韩顺平_php从入门到精通_视频教程_第20讲_仿sohu主页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理...

    韩顺平_php从入门到精通_视频教程_第20讲_仿sohu首页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理 对sohu页面的分析 注释很重要 经验:写一点,测试一点,这是一个很好的方法. ...

  2. php 每天早上八点执行操作_php多进程单线程之phpcgi、phpfpm

    php从代码级别的执行上是单线程的, 但是由php-fpm进程管理机制是多进程单线程的, 也就是php是多进程执行的. 有效提高并发的响应效率.了解关于cgi.fastCGI.php-cgi.php- ...

  3. php 多进程脚本,php多进程_php多进程并行执行脚本的代码

    摘要 腾兴网为您分享:php多进程并行执行脚本的代码,小度音响,深圳交警,枇杷派,配音等软件知识,以及东吴证券大智慧,新目标初中英语app,简单动画,电脑app,快读小说app,栀子欢,反p2p,多功 ...

  4. php多进程 写入文件_PHP多进程中使用file_put_contents安全吗?

    TL;DR Linux下,PHP多进程使用 file_put_contents() 方法记录日志时,使用追加模式(FILE_APPEND),简短的日志内容不会重叠,即能安全的记录日志内容. file_ ...

  5. tinyint数据类型php筛选时怎么判断_PHP从入门到精通(三)PHP语言基础

    PHP从入门到精通(三)PHP语言基础 一.PHP标记风格 PHP支持4种标记风格 1.XML风格.(推荐使用) <?phpecho "这是XML分割的标记"; ?> ...

  6. 郝斌mysql自学视频教程_PHP从入门到精通2015版(初级)

    PHP从入门到精通2015版 教程列表: 01-1php介绍,php脚本模式传智播客趣IT 01-2web服务运行模式及相关技术(软件)传智播客趣IT 01-3php网页运行原理传智播客趣IT 01- ...

  7. php敏感字符串过滤_PHP代码审计入门:常见的危险函数和审计点

    01什么是危险函数 函数设计出来就是让人使用的,之所以危险,是因为其功能过于强大.开发人员特别是刚从业的人员很少会完整阅读完整个文档,再或者是没有意识到当给这些函数传递一些非常规的,外部可控的参数会带 ...

  8. php 7 中对数值 * 100 出现很多小数_PHP快速入门第二讲:数据类型

    PHP是后端脚本语言,主要是处理各种数据的.说到数据,肯定离不开数据类型.下面我们罗列PHP数据类型,并逐个进行讲解: 1.字符串(string) 字符串是PHP比较常见的数据类型,字符串数据类型一般 ...

  9. Python 进程 Process 与线程 threading 区别 - Python零基础入门教程

    目录 一.Python 线程 threading 创建 二.Python 进程 Process 创建 三.Python 进程 Process 和线程 threading 区别 四.Python 进程 ...

最新文章

  1. 房价集体上扬?最新房价数据分析看房价走势
  2. 「 每日一练,快乐水题 」717. 1比特与2比特字符
  3. CodeForces - 1196F K-th Path(最短路+思维)好题
  4. c语言字符屏幕,C语言字符屏幕函数 - 编程资料 - Powered 万人网络编程学院 bcxy.yinese.com...
  5. oracle约束应用实例,oracle 约束的novalidate 应用
  6. QT添加rtmp库的时候出现问题
  7. 列表查询组件代码, 简化拼接条件SQL语句的麻烦
  8. 【强化学习】 Nature DQN算法与莫烦代码重现(tensorflow)
  9. 西门子PLC编写抢答系统
  10. html制作手机预览效果,webstorm实现手机预览页面
  11. 深度揭秘暴力破解SSH密码 —— Medusa美杜莎
  12. 三万元存一年,利息是多少?银行工作人员:这么存最合算!
  13. Notion 编辑器原理分析
  14. 有的小伙伴问我英语不好可以学编程吗?
  15. 图像压缩之基于神经网络压缩(BP)
  16. 安装Linux CentOS7操作系统
  17. java程序打包一体化:代码-jar-exe-安装包(图文详解、资源提供)
  18. java向前缩进的快捷键_C++(十四) — 常用快捷键总结
  19. 百惠送货单管理系统2.63 官方版
  20. 小米稳定版怎么root

热门文章

  1. windows编程 识别拖动_五步学会任何编程语言 | Linux 中国
  2. C#中结构体排序方法(Array.sort() + ICompare)
  3. 2017.7.27 排列perm 思考记录
  4. 计算机术语中英文对照表(流水线/微架构/体系结构/指令集)
  5. 查看、修改linux系统的最大链接数限制、文件描述符限制、端口范围限制、虚拟内存等
  6. 微信支付宝服务器分布,支付宝微信扫码支付中间件「第二届立创商城电子制作节30强作品」...
  7. springboot整合es_[ElasticSearch从入门到场景实战]spring boot集成SpringData操作es
  8. python turtle画动物_如何用python画简单的动物
  9. 锂电池接线方法图_老电工整理的41条电路接线方法,每一条都值得收藏
  10. A Brief Overview Of Vulkan API