php是单进程的是吧,每一个脚本的执行都是相互独立的,
多进程是个什么概念呢?
我看了这篇文章http://www.thinkphp.cn/topic/14728.html有个疑惑:
他说是多进程执行队列可以加快任务处理速度,但是需要解决的问题是,多进程处理任务要防止重复处理,但是:
if ($minute % 5 == 0)
{
for ($i=0; $i < 10; $i++) {
$cmd = "$phpcmd doQueue.php 10 $i>> doQueueMission".date('Y-m-d').".log ";
echo date("Y-m-d H:i:s") . "t : " .$cmd."n";
system($cmd);
}
}
这个一个定时任务 crontab 执行十次system(),这不算多进程吧,还是并行啊,这没什么意义啊。
多进程应该是配置crontab 吧?但是真正的难点在于“标记队列”不让重复执行
最近像最队列,解决原有的下单,注册,发消息慢的问题,感觉队列好难啊,总结几点在这里:
1:任务存放在哪里?
2:后台守护程序的配置
3:守护程序的多进程与定时
4:防止多进程重复拉取队列任务执行(3,4这才是最难的点)
求大神指点啊,有无成熟的队列案列啊?
https://github.com/chrisboulton/php-resque
据说system()会开启新的进程, 所以循环执行多次system()是有意义的.
这些都是对的.
理论上讲, 任何可以存储数据的方式都可以用作MessageQueue. 比如磁盘文件, 比如Mysql.
但是更好的选择是: 使用专门的MQ软件, 比如: ActiveMQ, RabbitMQ..., 类似的软件很多很多. 题主可以了解一下.
php的多进程和crontab 没啥关系,因为如果你没用php的子进程它都是串行的,pcntl_fork()这个函数是使用子进程的