博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【PHP】一种实现多进程的方式
阅读量:6268 次
发布时间:2019-06-22

本文共 1009 字,大约阅读时间需要 3 分钟。

多进程

GO 语言可以很容易的实现多进程,对于 PHP,有没有比较简单的方法去实现?

这里有一种巧妙的方式,来实现多进程。

但是需要注意一下 内存CPU 的使用情况

场景:消息PUSH

假设 PUSH 有多种类型,比如针对用户的,针对游戏的,针对全局的。

我们使用 PHP 脚本去执行下发操作,长连接 PUSH 服务使用第三方系统提供的 API 来支持。

PHP 脚本是顺序执行的,假设配置了 NPUSH,后续的 PUSH 就要等前面的 PUSH 执行完毕,才能继续。

比如,第一条 PUSH 是处于 While(true) 之类的循环状态中,下发时间范围为一整天;那么其他的 PUSH 就只

能干等着,无法及时执行 PUSH 操作,从而耽误了业务。

方案Deamon 进程 和 Act 进程

1、Deamon 进程:配置 crontab

* * * * *  flock -xn /tmp/push_deamon.lock -c "/usr/local/php/bin/php push_deamon.php >> /tmp/push_error.log 2>&1"

2、Act 进程:在 push_deamon.php 中,针对不同 push_id,启动以下脚本。

$command = flock -xn /tmp/push_act_{$push_id}.lock -c "nohup /usr/local/php/bin/php -f push_act.php $push_id >> /tmp/push_error.log 2>&1 &"exec($command);

问题Act 进程被手动 Kill

有些 PUSH 是每天执行一次的,如果对应的 Act 进程被杀死。

那么对应的锁文件 push_act_{$push_id}.lock,就没有被清理。

这样会导致 Deamon 进程重启 Act 进程时,发现有锁文件,就不会继续启动 Act 进程。

解决办法:在 Deamon 进程中自动删除昨天的锁文件

$command = "find /tmp/ -daystart -mtime 1 -type f -name push_act_{$id}.lock -exec rm -f {} \; >> /tmp/push_error.log 2>&1 &";exec($command);

转载地址:http://ayvpa.baihongyu.com/

你可能感兴趣的文章
Vue.js——60分钟快速入门
查看>>
设计模式 - 模板方法模式(template method pattern) 具体解释
查看>>
mysql判断一个字符串是否包含某子串 【转】
查看>>
a bad dream
查看>>
FD_CLOEXEC用法及原因_转
查看>>
element UI 的学习一,路由跳转
查看>>
RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
查看>>
Spring JavaBean属性值的注入方式( 属性注入, 特殊字符注入 <![CDATA[ 带有特殊字符的值 ]]> , 构造器注入 )...
查看>>
【Linux】Linux下统计当前文件夹下的文件个数、目录个数
查看>>
Hibernate_14_数据连接池的使用
查看>>
Codeforces Round #271 (Div. 2) D. Flowers (递推 预处理)
查看>>
jacky自问自答-java并发编程
查看>>
Struts2+JSON数据
查看>>
zTree实现单独选中根节点中第一个节点
查看>>
Cocos2D-x设计模式发掘之中的一个:单例模式
查看>>
很强大的HTML+CSS+JS面试题(附带答案)
查看>>
用树莓派实现RGB LED的颜色控制——C语言版本号
查看>>
VC2012编译CEF3-转
查看>>
java 自己定义异常,记录日志简单说明!留着以后真接复制
查看>>
Android 使用AIDL实现进程间的通信
查看>>