課程
/后端開發
/PHP
/php+mysql 模擬隊列發送郵件
我有一個疑問,隊列里到底保存的是每一個要發郵件的對象(用戶),還是保存發郵件的這個任務?項目中大家是怎么用的?
2016-10-15
源自:php+mysql 模擬隊列發送郵件 2-3
正在回答
看什么需求了,可以在隊列里只保存一個任務名稱加上這個任務所需要的數據,具體實現可以定義一個與這個名稱相對應的任務實現函數或者是類,取出隊列就可以根據任務名稱來執行任務了,這樣一個好處就是不僅僅局限與發送郵件任務,還可以實現其他一些任務,當然這也帶來了一個問題,就是內存優化問題,如何保證正確的執行完這些任務內存釋放掉,課程中是任務全部取出并執行完畢后腳本就執行完畢,也就是php進程關閉,內存自然就釋放掉了,那也是局限與當有郵件任務新增時會觸發并啟動這個發送郵件的進程,而大多數任務隊列是沒有觸發啟動進程的,,都是以后臺守護進程存在的,由管理員來手動或者其他方式觸發,反正就是不會在業務中做觸發的,不管是有什么任務添加進來,都可以自動的去執行,不需要觸發,沒有觸發也就是這個進程是不能關閉的,不能關閉就代表內存如果不合理的釋放就會造成這個守護進程的內存一直增加,遲早是會把計算機的內存消耗一空的,而具體實現思路呢可以參考php多進程編程了,需要擴展pcntl,且只能UNIX系統內核環境下支持,也就是要想php使用多線程,就需要在linux系統環境下,可以參考php-resque的實現思路,
阿布羅狄 提問者
pcntl是多進程,使用這種解決并發的隊列問題最好不要用php解決,php不是干這個的
保存的是需要發送的郵件
舉報
使用隊列方式異步發送郵件防頁面卡死,學完就知道強大之處
1 回答qq發送郵件失敗
1 回答怎么群發工資條到各自郵箱?
1 回答我用ajax 觸發隊列異步問題
1 回答每個注冊都要跑一遍列隊,如果列隊正在運行的時候,有新的注冊進程重復,會報錯嗎?
1 回答rcpt對郵箱名有要求嗎
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-10-15
看什么需求了,可以在隊列里只保存一個任務名稱加上這個任務所需要的數據,具體實現可以定義一個與這個名稱相對應的任務實現函數或者是類,取出隊列就可以根據任務名稱來執行任務了,這樣一個好處就是不僅僅局限與發送郵件任務,還可以實現其他一些任務,當然這也帶來了一個問題,就是內存優化問題,如何保證正確的執行完這些任務內存釋放掉,課程中是任務全部取出并執行完畢后腳本就執行完畢,也就是php進程關閉,內存自然就釋放掉了,那也是局限與當有郵件任務新增時會觸發并啟動這個發送郵件的進程,而大多數任務隊列是沒有觸發啟動進程的,,都是以后臺守護進程存在的,由管理員來手動或者其他方式觸發,反正就是不會在業務中做觸發的,不管是有什么任務添加進來,都可以自動的去執行,不需要觸發,沒有觸發也就是這個進程是不能關閉的,不能關閉就代表內存如果不合理的釋放就會造成這個守護進程的內存一直增加,遲早是會把計算機的內存消耗一空的,而具體實現思路呢可以參考php多進程編程了,需要擴展pcntl,且只能UNIX系統內核環境下支持,也就是要想php使用多線程,就需要在linux系統環境下,可以參考php-resque的實現思路,
2016-12-14
pcntl是多進程,使用這種解決并發的隊列問題最好不要用php解決,php不是干這個的
2016-10-15
保存的是需要發送的郵件