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()這個函數是使用子進程的