由于最近有個(gè)監(jiān)控系統(tǒng),客戶可以自由增加定時(shí)任務(wù),目前已經(jīng)1000多個(gè),很多都是秒級(jí)任務(wù)
我發(fā)現(xiàn)時(shí)而不工作,時(shí)而卡死,進(jìn)程還會(huì)嗝屁(不確定是不是我業(yè)務(wù)原因)
所以想冒昧請(qǐng)問(wèn)一下:
workerman/crontab 是否能承受幾萬(wàn)個(gè)秒級(jí)的定時(shí)任務(wù)?有人測(cè)試過(guò)嗎?
通過(guò)定時(shí)任務(wù)投遞消息給任務(wù)隊(duì)列,10W都沒(méi)啥問(wèn)題,只要你的消息進(jìn)程足夠多!
秒級(jí)任務(wù)需求這么多的嗎
如果秒級(jí)任務(wù),當(dāng)定時(shí)任務(wù)達(dá)到10000個(gè)的時(shí)候,是不是意味著每秒要處理10000個(gè)任務(wù)?這個(gè)不簡(jiǎn)單吶
你可以嘗試一下 Wind 協(xié)程框架,一個(gè)進(jìn)程負(fù)責(zé)任務(wù)分發(fā),將任務(wù)以定時(shí)任務(wù)的形式放入消息隊(duì)列,消息隊(duì)列可以啟多個(gè)進(jìn)程,每個(gè)進(jìn)程處理一兩千個(gè)并發(fā)任務(wù)問(wèn)題不大。
用戶的需求是每秒執(zhí)行一次任務(wù),并不是要?jiǎng)?chuàng)建一個(gè)定時(shí)器Timer。
你可以預(yù)置幾個(gè)粒度的定時(shí)器比如:1秒、10秒、30秒,并為每個(gè)粒度的定時(shí)器,創(chuàng)建一個(gè)Redis集合或哈希表
用戶創(chuàng)建秒級(jí)任務(wù)時(shí),把任務(wù)ID投放到秒級(jí)別的Redis集合或哈希表內(nèi)。
每個(gè)粒度的定時(shí)器,按周期循環(huán)執(zhí)行集合內(nèi)的任務(wù)即可(可以丟到另外的worker進(jìn)程執(zhí)行)。
時(shí)間輪概述
時(shí)間輪是一種高效來(lái)利用線程資源來(lái)進(jìn)行批量化調(diào)度的一種調(diào)度模型。把大批量的調(diào)度任務(wù)全部都綁定到同一個(gè)的調(diào)度器上面,使用這一個(gè)調(diào)度器來(lái)進(jìn)行所有任務(wù)的管理(manager),觸發(fā)(trigger)以及運(yùn)行(runnable)。能夠高效的管理各種延時(shí)任務(wù),周期任務(wù),通知任務(wù)等等。
落實(shí)到workerman進(jìn)程模型就是:1個(gè)管理進(jìn)程用來(lái)做定時(shí)調(diào)度,N個(gè)執(zhí)行器進(jìn)程運(yùn)行具體的任務(wù)