2013/11/21工作随笔-PHP开启多进程
2013-11-21 18:30
204 查看
今天被问到一个问题,php如何开启多进程才比较稳定。
意思是这个程序会持续10分钟,10分钟循环做这同一个操作
然后开启一个cron:
这个cron每两分钟跑一个前面的php程序
这样就能保证同时会有5个程序在Do SomeThing。
启动一个php父进程,在程序中使用exec:
这个方法当然也有很多变种,比如
1 第二个循环启动的程序使用shell来做
2 第一个Do SomeThing的函数使用上个方法的持续进程
意思就是父进程可以获取处理子进程的输出信息,也可以等待子进程处理完以后做后续操作。
而后面两种子进程是“不受控制”的。
PS:要想让后面两种子进程受控制,或许可以使用一些第三方存储,比如日志,比如redis等。
第二种和第三种方法,cron+php的方法,有种好处是不会出现长时间贮存内存中的进程。
由于php的底层实现很有可能导致内存泄漏,所以一个“写的不够好”的PHP程序如果长时间一直运行,很有可能导致内存使用出现问题。所以不应该让一个php程序“长时间运行”。
第二三种方法,一个程序运行完成之后就会立即结束进程,即使有内存泄漏也不会导致任何问题。所以比较让人放心点。
PS:再说一下,方法一也不是必须要起常驻内存的进程,但往往我们做的时候会让父进程常驻着。
还有啥呢,往往多进程的话要注意并发,可能会用到锁之类的。因为一般要保证Do SomeThing的原子性才行。
方法二我们在线上大量使用了,并上redis的pop队列操作,使用情况真是嘎嘎好用。
php开启多进程执行一个操作有哪些方法:
首先想到的是使用pcntl的fork
具体可以参考之前的文章:PHP的pcntl多进程其次想到的方法是使用linux的crontab
有个php程序,内部实现大概是<?php $startTime = time(); while(1) { if (time() - $startTime > 600) { break; } // ... Do SomeThing }
意思是这个程序会持续10分钟,10分钟循环做这同一个操作
然后开启一个cron:
*/2 * * * * /usr/local/bin/php XXX.php
这个cron每两分钟跑一个前面的php程序
这样就能保证同时会有5个程序在Do SomeThing。
还有想到的方法是使用php的exec函数
首先当然有个Do SomeThing的php程序:a.php启动一个php父进程,在程序中使用exec:
<?php for($i = 0; $i < $count; $i++){ exec("nohup /user/local/bin/php a.php >> /dev/null &"); }
这个方法当然也有很多变种,比如
1 第二个循环启动的程序使用shell来做
2 第一个Do SomeThing的函数使用上个方法的持续进程
有啥区别呢
第一种使用pcntl的方法,感觉起来子进程“是受控制”的意思就是父进程可以获取处理子进程的输出信息,也可以等待子进程处理完以后做后续操作。
而后面两种子进程是“不受控制”的。
PS:要想让后面两种子进程受控制,或许可以使用一些第三方存储,比如日志,比如redis等。
第二种和第三种方法,cron+php的方法,有种好处是不会出现长时间贮存内存中的进程。
由于php的底层实现很有可能导致内存泄漏,所以一个“写的不够好”的PHP程序如果长时间一直运行,很有可能导致内存使用出现问题。所以不应该让一个php程序“长时间运行”。
第二三种方法,一个程序运行完成之后就会立即结束进程,即使有内存泄漏也不会导致任何问题。所以比较让人放心点。
PS:再说一下,方法一也不是必须要起常驻内存的进程,但往往我们做的时候会让父进程常驻着。
还有啥呢,往往多进程的话要注意并发,可能会用到锁之类的。因为一般要保证Do SomeThing的原子性才行。
方法二我们在线上大量使用了,并上redis的pop队列操作,使用情况真是嘎嘎好用。
相关文章推荐
- nginx多条件if判断后rewrite,减轻后端php工作压力(随笔)
- nginx多条件if判断后rewrite,减轻后端php工作压力(随笔)
- PHPFPM下开启状态检测页面
- windows7X64环境下wamp开启PHP_Curl组件
- PB中如何控制判断大写以及小键盘指示灯是否开启并与按键协调工作
- 工作记录:php实现对QQ号,手机号,IP地址添加星号作为掩码。
- windows服务器中检测PHP SSL是否开启以及开启SSL的方法
- php学习随笔
- PHP 7 编译安装开启 libevent 扩展支持
- php如何开启gd2扩展
- [转]PHP中的(伪)多线程与多进程
- php服务的开启
- php开启openssl的方法
- 开始学习Php准备工作
- 提升PHP工作效率的53个技术要点
- php为Apache指定工作目录(虚拟目录)
- 开启和关闭服务器代理(php)
- PHP开发入门-Apache开启伪静态
- [20110314]工作随笔