隊列實現看似簡單,我想問下,在比如發送大量郵件的情況的,進入隊列和消除隊列,肯定不是在統一時間進行的吧,比如我調用inqueue.php進隊列加入要發送的郵箱地址,dequeue.PHP發送郵件並消除減去隊列,這兩個肯定不是一起啟動並執行吧?。還是在queue.php裡邊先進隊列在消除隊列如果是這樣的話那和用迴圈有什麼區別?
誰能以發送大量郵件為例子給解釋下隊列的實際用法嗎
回複內容:
隊列實現看似簡單,我想問下,在比如發送大量郵件的情況的,進入隊列和消除隊列,肯定不是在統一時間進行的吧,比如我調用inqueue.php進隊列加入要發送的郵箱地址,dequeue.PHP發送郵件並消除減去隊列,這兩個肯定不是一起啟動並執行吧?。還是在queue.php裡邊先進隊列在消除隊列如果是這樣的話那和用迴圈有什麼區別?
誰能以發送大量郵件為例子給解釋下隊列的實際用法嗎
隊列怎樣運作你基本上不需要考慮,只要使用現成的隊列即可,例如httpsqs,簡單的訊息佇列,先進先出,用http操作,簡單易用,只關係入列和出列即可,至於有什麼用,例如郵件發送、大量資料寫入、簡訊發送、反正可以非同步作業的盡量隊列完成
參考這個:http://segmentfault.com/q/1010000000750317/a-1020000000750367
本質就是非同步和阻塞。
不用隊列
進入操作平台
點擊發送按鈕
等……
等……
咦…… 怎麼沒有反應……
或者人性化點兒,添加一個進度條
N分鐘後,操作完成
在這個過程中,你是不能進行任何操作的。
使用隊列
進入操作平台
點擊發送按鈕
(想等,想偷懶,沒門,已經結束了)
繼續進行其它操作。
我前幾天也提了這個問題和你的比較相似點這裡
現在我想的解決方案是,將任務以隊列形式交給後台執行,至於你的問題,隊列的優點就是你發送了一個任務,交給worker去執行,你可以繼續做想做的事情,然後通過事件監聽來記錄每個條目執行成功與否,成功後消除。
php的話用gearman就挺好,或者redis來處理隊列