多进程: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/phppush_deamon.php>>/tmp/push_error.log2>&1"2.Act流程:在push_deamon.php中,针对不同的push_ids启动如下脚本。$command=flock-xn/tmp/push_act_{$push_id}.lock-c"nohup/usr/local/php/bin/php-fpush_act.php$push_id>>/tmp/push_error.log2>&1&"执行($命令);问题:如果相应的Act进程被kill掉,Act进程被手动kill掉,每天执行一次PUSH。那么对应的锁文件push_act_{$push_id}.lock还没有被清理。这会导致Deamon进程重新启动Act进程,如果找到锁文件,将不会继续启动Act进程。解决方法:在Deamon进程中自动删除昨天的lock文件$command="find/tmp/-daystart-mtime1-typef-namepush_act_{$id}.lock-execrm-f{}\;>>/tmp/push_error.log2>&1&";exec($command);
