拿什么守护你-PHP程序级守护进程的实现与优化
2012-03-04 07:42 轩脉刃 阅读(3814) 评论(0) 编辑 收藏 举报首先需要解释的是什么是守护进程。
守护进程就是在后台一直运行的进程。比如我们启动的httpd,mysqld等进程都是常驻内存内运行的程序。
针对需求进行分析:
需求:有一个常驻队列messageQueue(假设在redis内存中),这个队列会有可能有请求不定期的往队列中增加元素。同时我们要求在队列中有元素的时候,按照队列顺序将元素pop出来,并进行处理(假设这个处理只是echo ‘test’);
解决方法:
现在假设已经有了两个函数
function oPopMessageQueue(){ …} //获取队列最后一个元素;
function vDealElement($element) { …} 处理元素;
要求写出一个守护程序,完成上面的需求。
程序:
好了,这个程序很容易想到,可以使用while循环来做
1 2 3 4 5 6 7 | while (true) { if ( $element = oPopMessageQueue()) { vDealElement( $element ); } } |
考虑1 : 这个程序如果一直跑的话已经可以满足上面的需求了.
但是考虑到:1 用php进程跑有可能会由于各种情况(比如运行时间过长),进程挂了,这样程序就无法自动重连了.
方法:使用cron
我们在定时脚本中每10分钟起一个进程跑这个程序。
然后设置这个程序的运行时间为10分钟,10分钟后自动取消,于是代码变成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | while (true) { if ( $element = oPopMessageQueue()) { vCheckTimeLimit(); vDealElement( $elemnt ); } } $timeStart = 0; function vCheckTimeLimit() { global $timeStart ; if ( empty ( $timeStart )) { $timeStart = time(); } if (time() - $timeStart > 60*10) { exit ; } } |
1 |
1 | 考虑2,可能会有这种需求: 需要有随时让脚本暂停的功能: |
1 | 于是考虑使用文件来增加暂停功能 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | while (true) { if ( $element = oPopMessageQueue()) { vCheckTimeLimit(); vCheckEnd(); vDealElement( $elemnt ); } } function vCheckEnd() { if ( file_exists ( "/home/JesephYe/end" )) { exit ; } } |
1 | 考虑3, 是否可以改成多线程的程序,让运行的效率更高? |
1 | 这个只要把cron的10分钟起一个进程的限制改成每1分钟起一个进程就好了 |
1 | 这样能保证有10个线程在运行程序 |
1 | 但是有一个基本要求是:oPopMessageQueue()是一个原子操作 |
----------------------
作者:yjf512(轩脉刃)
出处:http://www.cnblogs.com/yjf512/
本文版权归yjf512和cnBlog共有,欢迎转载,但未经作者同意必须保留此段声明
实时了解作者更多技术文章,技术心得,请关注微信公众号“轩脉刃的刀光剑影”
本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架