国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

跪求,郵件群發(fā)如何提高效率?

lxping

由于郵件發(fā)送比較耗時(shí),所以我用AsyncTcpConnection異步任務(wù),但由于workerman是多進(jìn)程單線程,那么在如下場(chǎng)景中,該如何提高并發(fā)效率呢?

場(chǎng)景:
有2個(gè)耗時(shí)任務(wù)需要在同一時(shí)間執(zhí)行,其中一個(gè)是郵件群發(fā),假設(shè)要發(fā)送1000個(gè)郵件,任務(wù)進(jìn)程100個(gè)。

方案疑問(wèn):
1、1000個(gè)郵件分別通過(guò)AsyncTcpConnection發(fā)送給100個(gè)進(jìn)程。這種方案會(huì)因?yàn)?00個(gè)進(jìn)程被占滿(mǎn),而導(dǎo)致另一個(gè)任務(wù)必須等待1000個(gè)郵件全部發(fā)送完畢后才能執(zhí)行。

2、1000個(gè)郵件只發(fā)送給1個(gè)進(jìn)程,這樣雖然2個(gè)任務(wù)都能同時(shí)執(zhí)行,但其余的98個(gè)進(jìn)程處于閑置狀態(tài),而1000個(gè)郵件只能在單線程中耗時(shí)很久。

3、根據(jù)任務(wù)中的子任務(wù)數(shù)量均分進(jìn)程,比如讓1000個(gè)郵件占用80個(gè)進(jìn)程,另一個(gè)任務(wù)占用20個(gè)進(jìn)程。但是任務(wù)有很多種類(lèi),都是后臺(tái)人工添加的,所以php無(wú)法知道某個(gè)任務(wù)是不是非常耗時(shí),而無(wú)法正確分配進(jìn)程。

4、采用php多線程,但workerman手冊(cè)說(shuō)pthreads擴(kuò)展還不夠穩(wěn)定,所以不知道php多線程是否靠譜。

所以上述我能想到的4種方案,都存在問(wèn)題,那么,還有什么方案能保證我這個(gè)需求呢?跪求!!

2664 2 0
2個(gè)回答

phpcreeper

1、首先按照手冊(cè)的異步方案來(lái)實(shí)施:
http://doc.workerman.net/faq/async-task.html
假定兩個(gè)耗時(shí)任務(wù)分別為A和B、那么對(duì)于單臺(tái)任務(wù)服務(wù)器可以開(kāi)啟兩組不同的端口,即分別對(duì)應(yīng)AB開(kāi)啟兩種不同的業(yè)務(wù)進(jìn)程組分別處理;另外任務(wù)服務(wù)器的強(qiáng)處理能力需要保證:比如多核保證充分發(fā)揮多進(jìn)程優(yōu)勢(shì)、另外就是足夠大的內(nèi)存、這個(gè)需要自己根據(jù)業(yè)務(wù)評(píng)估;再有就是集群了,把不同的任務(wù)交給不同的機(jī)器來(lái)處理。
2、1000個(gè)郵件只發(fā)送給1個(gè)進(jìn)程,這樣雖然2個(gè)任務(wù)都能同時(shí)執(zhí)行,這個(gè)說(shuō)法不對(duì),單進(jìn)程內(nèi)是不可能并行執(zhí)行的,是串行運(yùn)作的;
3、比如:寫(xiě)入任務(wù)的時(shí)候給任務(wù)打個(gè)tag或優(yōu)先級(jí)啥的,這樣根據(jù)不同的tag交給不同的進(jìn)程組或機(jī)器來(lái)處理;
4、PHP的多線程擴(kuò)展不穩(wěn)定,所以不推薦使用;

  • lxping 2020-02-19

    謝謝,我也想過(guò)使用不同端口運(yùn)行不同任務(wù),但是由于任務(wù)的數(shù)量是不確定的,就需要?jiǎng)討B(tài)開(kāi)啟新端口。但workerman啟動(dòng)多少個(gè)進(jìn)程,只能在linux里部署時(shí)或者平滑重啟才能生效,無(wú)法通過(guò)php端的代碼動(dòng)態(tài)新增端口。

  • phpcreeper 2020-02-20

    我認(rèn)為技術(shù)架構(gòu)的變遷是一定是跟隨著業(yè)務(wù)聯(lián)動(dòng)變遷的;任務(wù)數(shù)在特定的一段周期內(nèi)肯定是能有個(gè)預(yù)估值的;長(zhǎng)遠(yuǎn)的看即便任務(wù)數(shù)量不確定,也沒(méi)什么關(guān)系呢,還是那句話,有量就同步的橫向擴(kuò)展多進(jìn)程模型甚至集群部署;另外新增動(dòng)態(tài)端口可以通過(guò)新增獨(dú)立的啟動(dòng)腳本實(shí)現(xiàn),不一定非得是在原啟動(dòng)腳本下派生子進(jìn)程;
    關(guān)于如何平滑新增服務(wù),看這里: https://github.com/walkor/Workerman/pull/503

小陽(yáng)光

我只看了你說(shuō)的用線程,沒(méi)看業(yè)務(wù),你可以用swoole的協(xié)程

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??