当前位置:Gxlcms > PHP教程 > mysql-php关于队列的一点疑问?

mysql-php关于队列的一点疑问?

时间:2021-07-01 10:21:17 帮助过:2人阅读

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()这个函数是使用子进程的

人气教程排行