php关于队列的一点疑问?

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".dateY-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这个函数是使用子进程的

发表评论

电子邮件地址不会被公开。 必填项已用*标注