Maison >développement back-end >tutoriel php >mysql - php关于队列的一点疑问?

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

WBOY
WBOYoriginal
2016-06-06 20:11:36920parcourir

php是单进程的是吧,每一个脚本的执行都是相互独立的,

多进程是个什么概念呢?

我看了这篇文章http://www.thinkphp.cn/topic/14728.html有个疑惑:
他说是多进程执行队列可以加快任务处理速度,但是需要解决的问题是,多进程处理任务要防止重复处理,但是:

<code>if ($minute % 5 == 0)
{
    for ($i=0; $i > doQueueMission".date('Y-m-d').".log  ";
        echo  date("Y-m-d H:i:s") . "t : " .$cmd."n";
        system($cmd);
    }
}
</code>

这个一个定时任务 crontab 执行十次system(),这不算多进程吧,还是并行啊,这没什么意义啊。
多进程应该是配置crontab 吧?但是真正的难点在于“标记队列”不让重复执行

最近像最队列,解决原有的下单,注册,发消息慢的问题,感觉队列好难啊,总结几点在这里:
1:任务存放在哪里?
2:后台守护程序的配置
3:守护程序的多进程与定时
4:防止多进程重复拉取队列任务执行(3,4这才是最难的点)

求大神指点啊,有无成熟的队列案列啊?

回复内容:

php是单进程的是吧,每一个脚本的执行都是相互独立的,

多进程是个什么概念呢?

我看了这篇文章http://www.thinkphp.cn/topic/14728.html有个疑惑:
他说是多进程执行队列可以加快任务处理速度,但是需要解决的问题是,多进程处理任务要防止重复处理,但是:

<code>if ($minute % 5 == 0)
{
    for ($i=0; $i > doQueueMission".date('Y-m-d').".log  ";
        echo  date("Y-m-d H:i:s") . "t : " .$cmd."n";
        system($cmd);
    }
}
</code>

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

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn