位置: 编程技术 - 正文

PHP多进程之pcntl_fork的实例详解(php进程太多)

编辑:rootadmin

推荐整理分享PHP多进程之pcntl_fork的实例详解(php进程太多),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php多进程处理大数据,php多进程处理大数据,php是多进程还是单进程,php进程太多,php多进程写入文件,php是多进程还是单进程,php是多进程还是单进程,php 多进程,内容如对您有帮助,希望把文章链接给更多的朋友!

PHP多进程编之pcntl_fork的实例详解

其实PHP是支持并发的,只是平时很少使用而已。平时使用最多的应该是使用PHP-FMP调度php进程了吧。

但是,PHP的使用并不局限于做Web,我们完全也可以使用PHP来进行系统工具类的编程,做监控或者是运维。在使用这些方向的时候,我们可以使用到PHP的更多特性,例如并发(多进程)、socket编程等。

那么接下来就说说我遇到的PHP多进程的编程。这个多进程的使用是有一个背景的,下面模糊描述一下背景。

我需要一个监控系统,当然使用PHP语言,监控系统需要监控很多种系统指标,为了让每个监控指标之间尽量专心的去做自己的事情,就需要单独使用一个进程去监控一个指标,还有一个进程去读取配置,拿到配置之后,根据配置去启动每条进程。

那么,这就需要我所说的多进程了。

首先启动一个主进程,主进程用来读取配置信息。例如,我读取到了我需要监控5个指标 接下来主进程启动5个子进程,分别监控这5个指标。 创建好5个指标监控进程之后之后,主进程进行监听配置。 一旦配置发生改变,杀死之前的进程并重新创建进程。

相对来说比较清晰的逻辑。那么接下来我们就化简一下操作:简单的说就是一个主进程创建5个子进程。

首先,创建进程在需要使用php的一个函数pcntl_fork(),这个函数可能有的同学不太熟,不过接触过Linux C变成的人都知道Linux下有个叫fork()的函数,用来创建子进程。这个函数和Linux下这个函数是一个意思。需要注意的是,这个函数在Linux下才能使用,而且需要安装pcntl的扩展。

对于这个函数怎么使用,我们可以查阅官方文档: 和PPID(父进程号)与其父进程不同。fork怎样在您的系统工作的详细信息请查阅您的系统 的fork(2)手册。

PHP多进程之pcntl_fork的实例详解(php进程太多)

成功时,在父进程执行线程内返回产生的子进程的PID,在子进程执行线程内返回0。失败时,在 父进程上下文返回-1,不会创建子进程,并且会引发一个PHP错误。

这样就可以创建一个子进程了,子进程创建成功以后会执行pcntl_fork()之后的方法。那么对于这个函数的返回值我们如何理解呢?

是这样的,我们调用函数创建进程的时候,函数执行时有时间的,而新的进程刚好是在函数执行开始和结束之间创建出来的,这样,新的进程也执行了这个函数,所以函数也需要有返回值。那么对于该函数一次执行之后,父进程和子进程都会受到该函数的返回值,由于父进程创建了子进程,而子进程并没有创建新的进程,所以子进程对于这个函数的返回结果是没有的,所以就给他赋了一个0。而父进程创建了子进程,子进程是存在pid的,所以就得到了那个进程的pid。

我们可以写个程序了解一下:

这个调用会输出两个值,但是我们如果直接print的只能看到一个值,也就是子进程的pid,但是使用var_dump我们就可以看到两个值,是0和子进程的pid。0这个值就是子进程返回过来的。

那么如何创建进程了解清楚之后,就可以开始创建进程了,我们需要创建5个进程,那么我就循环5次创建进程。得到如下代码:

这样就写好了,那么运行一下吧。啊?发现不是5个进程啊,发现有好多个进程,而且最后一个hahah4这个输出有个,为什么是呢?我们算一算。2^5=,为什么最后的线程数以指数增长了呢?

想发现这个并不难,因为我们之后的每一条都执行了while循环,到最后成了进程的指数增长——也就是说fork的时候把while循环也带了进去。但是我们只是要5个进程而已。怎么办呢?

通过之前对函数的研究可以看到,子进程中会返回一个为0的值,那么我们就可以知道,0为子进程的标记。我们可以通过对子进程标记来结束进程执行。所以我们可以将我们的代码修改为如下形式:

因为0其实是对子进程的标记,那么pid这个变量在子进程里实际上是0的,所以当发现pid的值为0的时候,我们就可以断定我们当前进程为一个子进程,不需要在让他执行while并创建子进程的子进程了,所以在执行完我们的内容之后就return或者exit退出这个执行就好了。这样就能保证我们执行创建了5个进程而不是个了。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

php封装单文件上传到数据库(路径) 1.首先思考一个问题上传到数据库是上传的图片还是图片地址这里我们上传的是图片地址,因为图片或音频存数据库中过大,数据库会崩掉。下面是封装

基于PHP-FPM进程池探秘 PHP支持多进程而不支持多线程;PHP-FPM在进程池中运行多个子进程并发处理所有连接请求。通过ps查看PHP-FPM进程池(pm.start_servers=2)状态如下:root@dfdd2fe

php 数据结构之链表队列 php链表队列实例代码:classQueue{private$last;private$first;private$oldfirst;privatestatic$n=0;publicfunction__construct(){$this-last=null;$this-first=null;$this-oldfirst=null;}publicfunctionp

标签: php进程太多

本文链接地址:https://www.jiuchutong.com/biancheng/288276.html 转载请保留说明!

上一篇:详解thinkphp5+swoole实现异步邮件群发(SMTP方式)(详解金球奖之争)

下一篇:php封装单文件上传到数据库(路径)(php封包)

  • 软件企业减免企业所得税
  • 税金及附加借贷科目
  • 公司账户转私人账户要多久时间
  • 普通发票忘记开数量和单价可以用吗
  • 企业回购股票会使所有者权益
  • 开一般户需要提交人行吗
  • 以前年度少计提费用
  • 出口货物当期免抵退税不得免征和抵扣税额,应计入
  • 防伪税控系统中的设备包括哪些
  • 货物赔偿是否需要发票
  • 回收废品残料会计分录
  • 安全基金提取标准
  • 国有企业取得的土地收储款是否要上缴财政
  • 中秋员工福利费会计分录
  • 个税速算扣除数是怎么计算出来的
  • 企业购入生产设备所支付的增值税
  • 一次性收到跨期租赁费会计分录
  • 财务费用手续费有哪些
  • 工伤抚恤金算遗产吗
  • 专用发票报销时限
  • 承租方出售资产的行为
  • 房地产企业综合税率是多少
  • 增值税进项抵扣完了还上附加税吗
  • 固定资产出售收入大于净值
  • 领用原材料用于职工福利的税费怎么算
  • 建筑行业会计成本会计工作流程
  • 收到工程结算单,怎么回复不认可
  • c盘appdata怎么清理
  • 老毛桃u盘启动盘制作工具怎么安装win10系统 老毛桃u盘安装win10系统图文教程
  • 部门预算编制方法
  • 扣缴单位无有效税种认定什么意思
  • 建筑业销项税和进项税计算
  • uefi系统安装win7gho
  • 电脑文件删除怎么恢复找回
  • win10待机屏幕图片设置
  • PHP:curl_getinfo()的用法_cURL函数
  • 同一控制下的控股合并中,合并方个别财务报表
  • 其他综合收益需要结转吗
  • 支付包装物押金是什么科目
  • 如何利用路由器登陆花生壳
  • php连接数据表
  • ChatGPT解开了我一直以来对自动化测试的疑惑
  • centos7配置自动获取ip
  • openeuler基于
  • java 日志系统
  • 对外捐赠会计分录怎么写
  • 帝国cms wordpress
  • 伤残补助金和工资一样吗
  • 小规模纳税人减按1%政策
  • sql server标识符
  • 待抵扣进项税的限额是什么
  • 小企业期间费用包括
  • 税金及附加里面包含什么
  • 建筑附加税税率
  • 回忆一下会计核算程序有哪几种?
  • 工程完工后的质保金怎么入账
  • 营改增是从什么时候开始实施的
  • 进口关税税款的计税依据
  • 预提费用在新会计准则下该如何列支?
  • 小企业会计应交所得税
  • sqlserver批处理
  • sqlserver2000数据库迁移到2008r2
  • 无法识别的选项
  • ubuntu下载net-tools
  • ubuntu下source、sh、bash、./执行脚本的区别详细介绍
  • RAVMOND.exe - RAVMOND是什么进程.有什么作用
  • win7共享设置(详细图文步骤)
  • linux groupmod命令参数及用法详解(linux修改组信息命令)
  • win10商店重置后不见了
  • linux就该这么些
  • unity调用android方法
  • android游戏开发框架
  • 使用node.js实现用IP地址查询天气情况
  • js如何创建类
  • 请问在javascript程序中
  • python 时间戳与格式化时间的转化实现代码
  • 辽宁省视同缴费标准?
  • 苏州社保一卡通要充值吗
  • 国家税务总局关于涉税中介
  • 大疆小白控和普通控哪个信号好
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设