首页 / PHP / mysql-php关于队列的一点疑问?
mysql-php关于队列的一点疑问?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-php关于队列的一点疑问?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2093字,纯文字阅读大概需要3分钟。
内容图文
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这才是最难的点)
求大神指点啊,有无成熟的队列案列啊?
回复内容:
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()这个函数是使用子进程的
内容总结
以上是互联网集市为您收集整理的mysql-php关于队列的一点疑问?全部内容,希望文章能够帮你解决mysql-php关于队列的一点疑问?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。