本公開涉及計(jì)算機(jī)技術(shù),尤其涉及一種任務(wù)調(diào)度方法和系統(tǒng)。
背景技術(shù):
在軟件開發(fā)中,經(jīng)常會(huì)遇到一些場(chǎng)景,需要使用到定時(shí)器timer,比如,數(shù)據(jù)定時(shí)刷新、定時(shí)查詢某個(gè)事件狀態(tài)等,這些定時(shí)執(zhí)行的任務(wù)可以稱為定時(shí)任務(wù)。在相關(guān)技術(shù)中,通常需要為每個(gè)定時(shí)任務(wù)分別設(shè)置一個(gè)對(duì)應(yīng)的timer,并且,timer會(huì)在時(shí)間到達(dá)時(shí)通知對(duì)應(yīng)的任務(wù)去執(zhí)行,比如,定時(shí)任務(wù)需要每隔2分鐘執(zhí)行一次,那么timer就會(huì)計(jì)時(shí),并在每隔2分鐘時(shí)通知任務(wù)執(zhí)行。這種timer啟動(dòng)為任務(wù)的計(jì)時(shí)也可以稱為任務(wù)調(diào)度。但是上述的任務(wù)調(diào)度方式,對(duì)系統(tǒng)的資源消耗較大,可能使得系統(tǒng)運(yùn)行較慢。
技術(shù)實(shí)現(xiàn)要素:
為克服相關(guān)技術(shù)中存在的問題,本公開提供一種任務(wù)調(diào)度方法和系統(tǒng),以降低較多的定時(shí)任務(wù)對(duì)系統(tǒng)資源的過多消耗。
根據(jù)本公開實(shí)施例的第一方面,提供一種任務(wù)調(diào)度方法,包括:
啟動(dòng)定時(shí)器對(duì)第一任務(wù)組的計(jì)時(shí),所述第一任務(wù)組包括:定時(shí)時(shí)間間隔相同的至少一個(gè)定時(shí)任務(wù);
當(dāng)所述第一任務(wù)組對(duì)應(yīng)的定時(shí)時(shí)間間隔到達(dá)時(shí),通知所述第一任務(wù)組中的各個(gè)定時(shí)任務(wù)執(zhí)行。
根據(jù)本公開實(shí)施例的第二方面,提供一種任務(wù)調(diào)度系統(tǒng),包括:
計(jì)時(shí)模塊,用于啟動(dòng)定時(shí)器對(duì)第一任務(wù)組的計(jì)時(shí),所述第一任務(wù)組包括: 定時(shí)時(shí)間間隔相同的至少一個(gè)定時(shí)任務(wù);
通知模塊,用于當(dāng)所述第一任務(wù)組對(duì)應(yīng)的定時(shí)時(shí)間間隔到達(dá)時(shí),通知所述第一任務(wù)組中的各個(gè)定時(shí)任務(wù)執(zhí)行。
本公開的實(shí)施例提供的技術(shù)方案可以包括以下有益效果:通過將定時(shí)任務(wù)分成定時(shí)任務(wù)組,并通過定時(shí)器啟動(dòng)對(duì)該定時(shí)任務(wù)組的定時(shí),相對(duì)于分別對(duì)各個(gè)定時(shí)任務(wù)計(jì)時(shí)的方式,將降低較多的定時(shí)任務(wù)對(duì)系統(tǒng)資源的過多消耗。
應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不能限制本公開。
附圖說(shuō)明
此處的附圖被并入說(shuō)明書中并構(gòu)成本說(shuō)明書的一部分,示出了符合本發(fā)明的實(shí)施例,并與說(shuō)明書一起用于解釋本發(fā)明的原理。
圖1是根據(jù)一示例性實(shí)施例示出的定時(shí)任務(wù)分組示意圖;
圖2是根據(jù)一示例性實(shí)施例示出的一種任務(wù)調(diào)度方法的流程圖;
圖3是根據(jù)一示例性實(shí)施例示出的關(guān)聯(lián)任務(wù)組示意圖;
圖4是根據(jù)一示例性實(shí)施例示出的一種任務(wù)調(diào)度系統(tǒng)的結(jié)構(gòu)圖;
圖5是根據(jù)一示例性實(shí)施例示出的另一種任務(wù)調(diào)度系統(tǒng)的結(jié)構(gòu)圖。
具體實(shí)施方式
這里將詳細(xì)地對(duì)示例性實(shí)施例進(jìn)行說(shuō)明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本發(fā)明相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。
為了在定時(shí)任務(wù)較多時(shí),避免對(duì)系統(tǒng)資源的過多消耗,提高系統(tǒng)的運(yùn)行速度,本申請(qǐng)實(shí)施例提供了一種任務(wù)調(diào)度方法,該方法對(duì)定時(shí)任務(wù)采用了一種集中式的調(diào)度方式。
參見圖1的示例,假設(shè)有四個(gè)定時(shí)任務(wù),定時(shí)任務(wù)是需要每隔一定時(shí)間執(zhí)行的任務(wù)。例如,定時(shí)任務(wù)-1可以是數(shù)據(jù)刷新任務(wù),每隔2分鐘執(zhí)行一次,即每隔2分鐘就從數(shù)據(jù)服務(wù)器獲取一次最新數(shù)據(jù);定時(shí)任務(wù)-2可以是查詢某個(gè)事件狀態(tài)的任務(wù),每隔1分鐘執(zhí)行一次,即每隔1分鐘就查詢一次事件狀態(tài)是否發(fā)生變化;同理,還可以包括定時(shí)任務(wù)-3和定時(shí)任務(wù)-4,本實(shí)施例假設(shè)定時(shí)任務(wù)-3也是每隔2分鐘執(zhí)行一次,定時(shí)任務(wù)-4是每隔1分鐘執(zhí)行一次。
如果將上述的“2分鐘”、“1分鐘”稱為定時(shí)時(shí)間間隔,那么可以看到,定時(shí)任務(wù)-3和定時(shí)任務(wù)-1的定時(shí)時(shí)間間隔相同,定時(shí)任務(wù)-4和定時(shí)任務(wù)-2的定時(shí)時(shí)間間隔相同。如圖1所示,可以將定時(shí)任務(wù)-3和定時(shí)任務(wù)-1歸為一組,稱為“任務(wù)組A”,將定時(shí)任務(wù)-4和定時(shí)任務(wù)-2歸為一組,稱為“任務(wù)組B”,而任務(wù)組A和任務(wù)組B可以都稱為第一任務(wù)組。
上述的各個(gè)第一任務(wù)組(任務(wù)組A和任務(wù)組B)都需要定時(shí)器timer進(jìn)行定時(shí),如圖1中的示意,任務(wù)組A和任務(wù)組B可以共用一個(gè)timer(圖1中的timer只是一個(gè)原理性的示意),該timer可以進(jìn)行計(jì)時(shí),在計(jì)時(shí)的過程中,當(dāng)每隔1分鐘到達(dá)時(shí),可以通知任務(wù)組B中的各個(gè)定時(shí)任務(wù)執(zhí)行;當(dāng)每隔2分鐘到達(dá)時(shí),就通知任務(wù)組A中的各個(gè)定時(shí)任務(wù)執(zhí)行。
由上述可以看到,本申請(qǐng)的任務(wù)調(diào)度方法是執(zhí)行圖2所示的流程:
在步驟201中,啟動(dòng)定時(shí)器對(duì)第一任務(wù)組的計(jì)時(shí),所述第一任務(wù)組包括:定時(shí)時(shí)間間隔相同的至少一個(gè)定時(shí)任務(wù)。
例如,第一任務(wù)組可以是圖1中的任務(wù)組A,其中包括兩個(gè)定時(shí)任務(wù),即定時(shí)任務(wù)-1和定時(shí)任務(wù)-3。分在同一任務(wù)組中的定時(shí)任務(wù),可以具有相同的定時(shí)時(shí)間間隔,比如,都是每隔2分鐘執(zhí)行一次。
可選的,需要啟動(dòng)定時(shí)器計(jì)時(shí)的第一任務(wù)組的數(shù)量可以為多個(gè),比如,在圖1示例中,包括兩個(gè)第一任務(wù)組,任務(wù)組A和任務(wù)組B,當(dāng)然,還可以包括任務(wù)組C或任務(wù)組D等其他任務(wù)組。
在步驟202中,當(dāng)所述第一任務(wù)組對(duì)應(yīng)的定時(shí)時(shí)間間隔到達(dá)時(shí),通知所述第一任務(wù)組中的各個(gè)定時(shí)任務(wù)執(zhí)行。
例如,定時(shí)器為第一任務(wù)組進(jìn)行計(jì)時(shí),每隔2分鐘時(shí),就通知第一任務(wù)組中的各個(gè)定時(shí)任務(wù)啟動(dòng)執(zhí)行。
當(dāng)?shù)谝蝗蝿?wù)組的數(shù)量為多個(gè)時(shí),比如,圖1所示例的兩個(gè)第一任務(wù)組,任務(wù)組A和任務(wù)組B,這兩個(gè)任務(wù)組的定時(shí)時(shí)間間隔不同,任務(wù)組A的定時(shí)時(shí)間間隔是2分鐘,任務(wù)組B的定時(shí)時(shí)間間隔是1分鐘,那么,定時(shí)器在計(jì)時(shí)的過程中,當(dāng)?shù)竭_(dá)各個(gè)第一任務(wù)組分別對(duì)應(yīng)的定時(shí)時(shí)間間隔時(shí),分別通知對(duì)應(yīng)的第一任務(wù)組。比如,計(jì)時(shí)到達(dá)每隔1分鐘時(shí),就通知任務(wù)組B,到達(dá)每隔2分鐘時(shí),就通知任務(wù)組A。
可選的,定時(shí)器在時(shí)間到達(dá)通知各個(gè)定時(shí)任務(wù)時(shí),可以根據(jù)第一任務(wù)組中的各個(gè)定時(shí)任務(wù)的優(yōu)先級(jí)標(biāo)識(shí),確定對(duì)各個(gè)定時(shí)任務(wù)的通知順序。比如,有的任務(wù)可能會(huì)比較繁瑣阻塞線程,導(dǎo)致后面的任務(wù)不能及時(shí)得到執(zhí)行,那么可以設(shè)定此類任務(wù)的優(yōu)先級(jí)較低,定時(shí)器就可以根據(jù)任務(wù)的優(yōu)先級(jí),對(duì)任務(wù)的執(zhí)行進(jìn)行排序,讓高優(yōu)先級(jí)的任務(wù)先執(zhí)行,保證重要功能的順利執(zhí)行,則定時(shí)器可以先行通知高優(yōu)先級(jí)的定時(shí)任務(wù)。
可以看到,在本實(shí)施例的任務(wù)調(diào)度方法,對(duì)多個(gè)定時(shí)任務(wù)采用了集中式的調(diào)度方式,即由一個(gè)定時(shí)器集中為多個(gè)定時(shí)任務(wù)進(jìn)行計(jì)時(shí),相比于傳統(tǒng)方式中的每個(gè)定時(shí)任務(wù)分別設(shè)置一個(gè)對(duì)應(yīng)的定時(shí)器,定時(shí)器的設(shè)置數(shù)量減少,可以減少對(duì)系統(tǒng)資源的消耗,因此,即使運(yùn)行了多個(gè)定時(shí)任務(wù)時(shí),也不會(huì)大幅降低系統(tǒng)的運(yùn)行速度。
此外,這種對(duì)定時(shí)任務(wù)進(jìn)行集中式的調(diào)度,還可以防止定時(shí)調(diào)度時(shí)的任務(wù)重復(fù)添加。在系統(tǒng)設(shè)計(jì)比較復(fù)雜時(shí),多人協(xié)作難免會(huì)出現(xiàn)代碼各種錯(cuò)誤,可能會(huì)導(dǎo)致同一個(gè)任務(wù)多次開啟執(zhí)行,通過集中式的管理,每個(gè)任務(wù)具有唯一標(biāo)識(shí),重復(fù)添加相同的任務(wù)可以設(shè)定只執(zhí)行一份任務(wù)。
在另一例子中,定時(shí)器還可以同時(shí)啟動(dòng)對(duì)關(guān)聯(lián)度比較高的一組定時(shí)任務(wù)的計(jì)時(shí),并同時(shí)停止對(duì)該組定時(shí)任務(wù)的計(jì)時(shí)。比如,當(dāng)用戶打開某個(gè)頁(yè)面時(shí),該頁(yè)面中包括多個(gè)要開始啟動(dòng)計(jì)時(shí)的定時(shí)任務(wù),也就是說(shuō),這多個(gè)定時(shí)任務(wù)在同一個(gè)頁(yè)面中,頁(yè)面啟動(dòng)則這些任務(wù)要同時(shí)啟動(dòng),當(dāng)頁(yè)面關(guān)閉該任務(wù)也要 同時(shí)關(guān)閉。本實(shí)施例針對(duì)這種情況,可以將上述的多個(gè)任務(wù)分在“關(guān)聯(lián)任務(wù)組”中,關(guān)聯(lián)任務(wù)組中包括至少兩個(gè)定時(shí)任務(wù)。
示例性的,當(dāng)檢測(cè)到上述頁(yè)面啟動(dòng)時(shí),定時(shí)器timer可以同時(shí)啟動(dòng)對(duì)關(guān)聯(lián)任務(wù)組中的所有定時(shí)任務(wù)的計(jì)時(shí);當(dāng)頁(yè)面關(guān)閉時(shí),timer可以同時(shí)停止對(duì)關(guān)聯(lián)任務(wù)組中的所有定時(shí)任務(wù)的計(jì)時(shí)。需要說(shuō)明的是,上述的頁(yè)面打開,只是個(gè)示例,同時(shí)啟動(dòng)或同時(shí)停止的定時(shí)任務(wù)并不一定只是依據(jù)同一任務(wù),也可以是其他關(guān)聯(lián)因素使得這些定時(shí)任務(wù)需要同時(shí)啟動(dòng)或停止定時(shí)。而本實(shí)施例通過將這些定時(shí)任務(wù)分在關(guān)聯(lián)任務(wù)組中,并通過定時(shí)器對(duì)關(guān)聯(lián)任務(wù)組中的任務(wù)進(jìn)行統(tǒng)一調(diào)度,也更加方便了對(duì)多個(gè)定時(shí)任務(wù)的管理。
此外,定時(shí)器在啟動(dòng)對(duì)關(guān)聯(lián)任務(wù)組中的各個(gè)定時(shí)任務(wù)的計(jì)時(shí)時(shí),還可以將關(guān)聯(lián)任務(wù)組中的各個(gè)定時(shí)任務(wù),根據(jù)定時(shí)任務(wù)的定時(shí)時(shí)間間隔,劃分入對(duì)應(yīng)所述定時(shí)時(shí)間間隔的第一任務(wù)組。參見圖3的示例,假設(shè)關(guān)聯(lián)任務(wù)組中包括定時(shí)任務(wù)-5和定時(shí)任務(wù)-6,并且假設(shè)定時(shí)任務(wù)-5的定時(shí)時(shí)間間隔是2分鐘,定時(shí)任務(wù)-6的定時(shí)時(shí)間間隔是1分鐘,那么,可以將定時(shí)任務(wù)-5劃分入任務(wù)組A,將定時(shí)任務(wù)-6劃分入任務(wù)組B,定時(shí)器timer依舊在定時(shí)時(shí)間間隔到達(dá)時(shí)分別通知任務(wù)組A和任務(wù)組B,只是這兩個(gè)任務(wù)組中的任務(wù)增加了。
此外,在上述的集中式任務(wù)調(diào)度系統(tǒng)中,還可以執(zhí)行一些集中式的任務(wù)管理工作。例如,可以在切后臺(tái)的瞬間將調(diào)度系統(tǒng)中的所有任務(wù)暫停,切到前臺(tái)時(shí)再恢復(fù)。又例如,可以在程序退出的時(shí)候把當(dāng)前執(zhí)行的任務(wù)存到磁盤中,下次啟動(dòng)時(shí)可以還原上次關(guān)閉時(shí)的狀態(tài),對(duì)于一些需要恢復(fù)上次狀態(tài)的需求有非常重要的作用。再例如,還可以進(jìn)行任務(wù)狀態(tài)的統(tǒng)一管理,在接收到任務(wù)狀態(tài)查詢請(qǐng)求時(shí),根據(jù)任務(wù)的唯一標(biāo)識(shí)查詢?nèi)蝿?wù)當(dāng)前的狀態(tài)信息,比如,距離任務(wù)下一次執(zhí)行還有多長(zhǎng)時(shí)間。
本申請(qǐng)實(shí)施例中,可以使用CFRunLoopTimerRef相關(guān)函數(shù)封裝Timer的調(diào)用,runloop底層函數(shù),這種封裝方式能夠更好的減少資源的消耗。此外,這種對(duì)多個(gè)定時(shí)任務(wù)統(tǒng)一管理的方式,有利于內(nèi)存的及時(shí)釋放,可以防止新手程序員誤寫導(dǎo)致內(nèi)存無(wú)法釋放。
為了實(shí)現(xiàn)上述的任務(wù)調(diào)度方法,本申請(qǐng)還提供了一種任務(wù)調(diào)度系統(tǒng),如圖4所示,該系統(tǒng)可以包括:計(jì)時(shí)模塊41和通知模塊42。
計(jì)時(shí)模塊41,用于啟動(dòng)定時(shí)器對(duì)第一任務(wù)組的計(jì)時(shí),所述第一任務(wù)組包括:定時(shí)時(shí)間間隔相同的至少一個(gè)定時(shí)任務(wù);
通知模塊42,用于當(dāng)所述第一任務(wù)組對(duì)應(yīng)的定時(shí)時(shí)間間隔到達(dá)時(shí),通知所述第一任務(wù)組中的各個(gè)定時(shí)任務(wù)執(zhí)行。
進(jìn)一步的,所述第一任務(wù)組的數(shù)量為至少一個(gè);至少一個(gè)所述第一任務(wù)組之間的定時(shí)時(shí)間間隔不同。通知模塊42,用于在定時(shí)器計(jì)時(shí)過程中,當(dāng)?shù)竭_(dá)各個(gè)第一任務(wù)組分別對(duì)應(yīng)的定時(shí)時(shí)間間隔時(shí),分別通知對(duì)應(yīng)的第一任務(wù)組。
進(jìn)一步的,計(jì)時(shí)模塊41,還用于同時(shí)啟動(dòng)對(duì)關(guān)聯(lián)任務(wù)組中的所有定時(shí)任務(wù)的計(jì)時(shí),所述關(guān)聯(lián)任務(wù)組中包括:至少兩個(gè)定時(shí)任務(wù);或者,同時(shí)停止對(duì)所述關(guān)聯(lián)任務(wù)組中的所有定時(shí)任務(wù)的計(jì)時(shí)。
如圖5所示,該系統(tǒng)還可以包括:分組模塊43,用于將所述關(guān)聯(lián)任務(wù)組中的各個(gè)定時(shí)任務(wù),根據(jù)所述定時(shí)任務(wù)的定時(shí)時(shí)間間隔,劃分入對(duì)應(yīng)所述定時(shí)時(shí)間間隔的第一任務(wù)組。
此外,通知模塊42,還用于在通知所述第一任務(wù)組中的各個(gè)定時(shí)任務(wù)執(zhí)行時(shí),根據(jù)所述第一任務(wù)組中的各個(gè)定時(shí)任務(wù)的優(yōu)先級(jí)標(biāo)識(shí),確定對(duì)各個(gè)定時(shí)任務(wù)的通知順序。
本實(shí)施例的任務(wù)調(diào)度裝置,對(duì)多個(gè)定時(shí)任務(wù)采用了集中式的調(diào)度方式,即由一個(gè)定時(shí)器集中為多個(gè)定時(shí)任務(wù)進(jìn)行計(jì)時(shí),相比于傳統(tǒng)方式中的每個(gè)定時(shí)任務(wù)分別設(shè)置一個(gè)對(duì)應(yīng)的定時(shí)器,定時(shí)器的設(shè)置數(shù)量減少,可以減少對(duì)系統(tǒng)資源的消耗,因此,即使運(yùn)行了多個(gè)定時(shí)任務(wù)時(shí),也不會(huì)大幅降低系統(tǒng)的運(yùn)行速度。
本領(lǐng)域技術(shù)人員在考慮說(shuō)明書及實(shí)踐這里公開的發(fā)明后,將容易想到本發(fā)明的其它實(shí)施方案。本申請(qǐng)旨在涵蓋本發(fā)明的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本發(fā)明的一般性原理并包括本公開未公開的本技術(shù)領(lǐng)域中的公知常識(shí)或慣用技術(shù)手段。說(shuō)明書和實(shí)施例僅被 視為示例性的,本發(fā)明的真正范圍和精神由下面的權(quán)利要求指出。
應(yīng)當(dāng)理解的是,本發(fā)明并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進(jìn)行各種修改和改變。本發(fā)明的范圍僅由所附的權(quán)利要求來(lái)限制。