摘要:多进程语言可以很容易的实现多进程,对于,有没有比较简单的方法去实现这里有一种巧妙的方式,来实现多进程。这样会导致进程重启进程时,发现有锁文件,就不会继续启动进程。解决办法在进程中自动删除昨天的锁文件
多进程:
GO 语言可以很容易的实现多进程,对于 PHP,有没有比较简单的方法去实现?
这里有一种巧妙的方式,来实现多进程。
但是需要注意一下 内存 和 CPU 的使用情况
场景:消息PUSH。
假设 PUSH 有多种类型,比如针对用户的,针对游戏的,针对全局的。
我们使用 PHP 脚本去执行下发操作,长连接 PUSH 服务使用第三方系统提供的 API 来支持。
PHP 脚本是顺序执行的,假设配置了 N 条PUSH,后续的 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);
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/22949.html
摘要:多进程中与多进程相关的两个重要拓展是和。函数执行期间,主进程除了等待无法处理其他任务,所以一般不认为这是多进程编程。回收子进程有两种方式,一种是主进程调用函数等待子进程结束另外一种是处理信号。 转载请注明文章出处: https://tlanyan.me/php-review... PHP回顾系列目录 PHP基础 web请求 cookie web响应 session 数据库操作 加解...
摘要:下文如无特殊声明将使用进程同时表示进程线程。收到数据后服务器程序进行处理然后使用向客户端发送响应。现在各种高并发异步的服务器程序都是基于实现的,比如。 并发 IO 问题一直是服务器端编程中的技术难题,从最早的同步阻塞直接 Fork 进程,到 Worker 进程池/线程池,到现在的异步IO、协程。PHP 程序员因为有强大的 LAMP 框架,对这类底层方面的知识知之甚少,本文目的就是详细介...
摘要:第一次子进程正在休眠中,父进程依旧在循环中。第三次此时父进程已经执行了,将已经退出的子进程回收,释放了等资源。梳理一下流程,子进程向父进程发送信号是对人们来说是透明的,也就是说我们无须关心。 [原文地址:https://blog.ti-node.com/blog...] 上一篇尬聊了通篇的pcntl_wait()和pcntl_waitpid(),就是为了解决僵尸进程的问题,但最后看起来...
阅读 994·2023-04-25 19:35
阅读 2633·2021-11-22 09:34
阅读 3679·2021-10-09 09:44
阅读 1713·2021-09-22 15:25
阅读 2931·2019-08-29 14:00
阅读 3371·2019-08-29 11:01
阅读 2595·2019-08-26 13:26
阅读 1735·2019-08-23 18:08