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

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

lxping

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

場景:
有2個耗時任務需要在同一時間執(zhí)行,其中一個是郵件群發(fā),假設要發(fā)送1000個郵件,任務進程100個。

方案疑問:
1、1000個郵件分別通過AsyncTcpConnection發(fā)送給100個進程。這種方案會因為100個進程被占滿,而導致另一個任務必須等待1000個郵件全部發(fā)送完畢后才能執(zhí)行。

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

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

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

所以上述我能想到的4種方案,都存在問題,那么,還有什么方案能保證我這個需求呢?跪求?。?/p>

2675 2 0
2個回答

phpcreeper

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

  • lxping 2020-02-19

    謝謝,我也想過使用不同端口運行不同任務,但是由于任務的數(shù)量是不確定的,就需要動態(tài)開啟新端口。但workerman啟動多少個進程,只能在linux里部署時或者平滑重啟才能生效,無法通過php端的代碼動態(tài)新增端口。

  • phpcreeper 2020-02-20

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

小陽光

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

  • 暫無評論
年代過于久遠,無法發(fā)表回答
??