本發(fā)明涉及通信技術(shù)領(lǐng)域,具體涉及一種定時(shí)任務(wù)的提醒方法及裝置。
背景技術(shù):
在許多業(yè)務(wù)系統(tǒng)中都需要設(shè)置定時(shí)任務(wù),通過定時(shí)任務(wù)能夠?qū)崿F(xiàn)自動(dòng)提醒的功能,從而大幅降低人工勞動(dòng)成本。例如,新聞系統(tǒng)中的新聞需要定期更新,由于新聞數(shù)量龐大,通過人工監(jiān)控每個(gè)新聞文件的更新時(shí)間并進(jìn)行更新操作的方式顯然無法勝任實(shí)際的業(yè)務(wù)需求。為此,通常會(huì)在新聞系統(tǒng)內(nèi)部設(shè)置定時(shí)器,通過定時(shí)器對(duì)新聞的更新時(shí)間進(jìn)行定期提醒,從而簡(jiǎn)化人工監(jiān)控的工作量。
但是,發(fā)明人在實(shí)現(xiàn)本發(fā)明的過程中發(fā)現(xiàn),現(xiàn)有技術(shù)中的上述方式至少存在下述缺陷:各個(gè)新聞文件的更新周期可能相同也可能不同,即使對(duì)于更新周期相同的新聞文件而言,也會(huì)因各個(gè)文件的產(chǎn)生時(shí)間不同而導(dǎo)致每個(gè)文件的具體更新時(shí)間不同,為此,在現(xiàn)有方式中,需要針對(duì)每個(gè)新聞文件分別設(shè)置一個(gè)定時(shí)器。然而,新聞系統(tǒng)中的新聞數(shù)量龐大,動(dòng)輒達(dá)到數(shù)十萬量級(jí),因此,需同時(shí)開啟數(shù)十萬個(gè)定時(shí)器,由此勢(shì)必因系統(tǒng)開銷龐大而導(dǎo)致諸如系統(tǒng)崩潰、延時(shí)過長(zhǎng)等一系列問題。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的定時(shí)任務(wù)的提醒方法及裝置。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種定時(shí)任務(wù)的提醒方法,該方法包括:確定接收到的定時(shí)任務(wù)的提醒周期,將所述定時(shí)任務(wù)合并到與所述提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中;將所述定時(shí)任務(wù)的提醒時(shí)間信息記錄到與所述定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中;根據(jù)與所述定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合,調(diào)用與所述定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器對(duì)所述定時(shí)任務(wù)組中包含的各個(gè)定時(shí)任務(wù)進(jìn)行定時(shí)提醒。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種定時(shí)任務(wù)的提醒裝置,該裝置包括:確定模塊,適于確定接收到的定時(shí)任務(wù)的提醒周期;合并模塊,適于將所述定時(shí)任務(wù)合并到與所述提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中;記錄模塊,適于將所述定時(shí)任務(wù)的提醒時(shí)間信息記錄到與所述定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中;提醒模塊,適于根據(jù)與所述定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合,調(diào)用與所述定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器對(duì)所述定時(shí)任務(wù)組中包含的各個(gè)定時(shí)任務(wù)進(jìn)行定時(shí)提醒。
在本發(fā)明提供的定時(shí)任務(wù)的提醒方法及裝置中,能夠根據(jù)定時(shí)任務(wù)的提醒周期將相同提醒周期的定時(shí)任務(wù)合并到同一個(gè)定時(shí)任務(wù)組中,并在定時(shí)任務(wù)組所對(duì)應(yīng)的有序任務(wù)集合中記錄該定時(shí)任務(wù)組所包含的各個(gè)定時(shí)任務(wù)的提醒時(shí)間信息,以便根據(jù)與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合確定其中包含的各個(gè)定時(shí)任務(wù)具體提醒時(shí)間,進(jìn)而調(diào)用與定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器對(duì)其中包含的各個(gè)定時(shí)任務(wù)進(jìn)行定時(shí)提醒。由此可見,通過對(duì)相同提醒周期的定時(shí)任務(wù)進(jìn)行合并,并通過與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中記錄的各個(gè)定時(shí)任務(wù)的提醒時(shí)間信息來確定定時(shí)任務(wù)組中每個(gè)定時(shí)任務(wù)的具體提醒時(shí)間以進(jìn)行提醒,從而降低了定時(shí)器的數(shù)量、減少了系統(tǒng)開銷。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說明
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例提供的一種定時(shí)任務(wù)的提醒方法的流程圖;
圖2示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例提供的一種定時(shí)任務(wù)的提醒方法的流程圖;
圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例提供的一種定時(shí)任務(wù)的提醒裝置的結(jié)構(gòu)框圖;
圖4示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例提供的一種定時(shí)任務(wù)的提醒裝置的結(jié)構(gòu)框圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例提供的一種定時(shí)任務(wù)的提醒方法的流程圖。如圖1所示,該方法包括以下步驟:
步驟s110:確定接收到的定時(shí)任務(wù)的提醒周期,將定時(shí)任務(wù)合并到與提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中。
本實(shí)施例中的定時(shí)任務(wù)包括各種類型的定時(shí)任務(wù),例如,可以是用于對(duì)新聞文件進(jìn)行定期更新的定時(shí)任務(wù)。并且,接收到的定時(shí)任務(wù)既可以是一個(gè),也可以是多個(gè)。當(dāng)接收到的定時(shí)任務(wù)為多個(gè)時(shí),分別確定每個(gè)定時(shí)任務(wù)的提醒周期,并分別根據(jù)各個(gè)定時(shí)任務(wù)的提醒周期將其合并到相應(yīng)提醒周期的定時(shí)任務(wù)組中。
步驟s120:將定時(shí)任務(wù)的提醒時(shí)間信息記錄到與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中。
其中,定時(shí)任務(wù)的提醒時(shí)間信息用于確定定時(shí)任務(wù)的具體提醒時(shí)間,因此,只要是能夠用于確定定時(shí)任務(wù)的具體提醒時(shí)間的信息均可應(yīng)用于本發(fā)明。例如,定時(shí)任務(wù)的提醒時(shí)間信息可以包括以下中的至少一個(gè):任務(wù)起始時(shí)間、下次提醒時(shí)間以及有序任務(wù)集合中相鄰的兩個(gè)定時(shí)任務(wù)之間的時(shí)間差。
為了便于查詢,與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中按照各個(gè)定時(shí)任務(wù)的具體提醒時(shí)間的先后順序依次存儲(chǔ)該定時(shí)任務(wù)組所包含的全部定時(shí)任務(wù)。其中,有序任務(wù)集合既可以采用zset數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),也可以通過數(shù)據(jù)隊(duì)列、消息隊(duì)列等各種形式實(shí)現(xiàn),本發(fā)明對(duì)有序任務(wù)集合的具體形式不做限定,只要能夠?qū)崿F(xiàn)有序存儲(chǔ)并快速查詢的目的即可。
步驟s130:根據(jù)與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合,調(diào)用與定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器對(duì)定時(shí)任務(wù)組中包含的各個(gè)定時(shí)任務(wù)進(jìn)行定時(shí)提醒。
其中,在定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中,按照各個(gè)定時(shí)任務(wù)的具體提醒時(shí)間的先后順序記錄了各個(gè)定時(shí)任務(wù)的提醒時(shí)間信息,因此,通過查詢與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合,能夠快速高效地確定出該定時(shí)任務(wù)組所包含的定時(shí)任務(wù)的數(shù)量以及各個(gè)定時(shí)任務(wù)的具體提醒時(shí)間。
可選的,為了節(jié)約系統(tǒng)開銷,一個(gè)定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器的數(shù)量?jī)H為一個(gè),通過多次調(diào)用該定時(shí)器能夠?qū)Χ〞r(shí)任務(wù)組中包含的多個(gè)定時(shí)任務(wù)分別進(jìn)行定時(shí)提醒。
本發(fā)明對(duì)上述的各個(gè)步驟的具體執(zhí)行順序不做限定,本領(lǐng)域技術(shù)人員可以根據(jù)需要靈活調(diào)整各個(gè)步驟之間的先后順序。通常情況下,每當(dāng)接收到新的定時(shí)任務(wù)時(shí)則自動(dòng)觸發(fā)步驟s110及步驟s120,以便將新的定時(shí)任務(wù)添加到對(duì)應(yīng)的定時(shí)任務(wù)組中,并根據(jù)新添加的定時(shí)任務(wù)對(duì)相應(yīng)的定時(shí)任務(wù)組所對(duì)應(yīng)的有序任務(wù)集合進(jìn)行更新。另外,步驟s130既可以在每次執(zhí)行完步驟s110及步驟s120后執(zhí)行,也可以獨(dú)立于步驟s110及步驟s120而根據(jù)預(yù)設(shè)周期自動(dòng)地周期性執(zhí)行。
由此可見,通過對(duì)相同提醒周期的定時(shí)任務(wù)進(jìn)行合并,并通過與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中記錄的各個(gè)定時(shí)任務(wù)的提醒時(shí)間信息來確定定時(shí)任務(wù)組中每個(gè)定時(shí)任務(wù)的具體提醒時(shí)間以進(jìn)行提醒,從而降低了定時(shí)器的數(shù)量、減少了系統(tǒng)開銷,并避免了因系統(tǒng)開銷過大而導(dǎo)致的系統(tǒng)崩潰、延時(shí)過長(zhǎng)等一系列問題。
圖2示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例提供的一種定時(shí)任務(wù)的提醒方法的流程圖。如圖2所示,該方法包括以下步驟:
步驟s210:確定接收到的定時(shí)任務(wù)的提醒周期。
本實(shí)施例中的定時(shí)任務(wù)包括各種類型的定時(shí)任務(wù),例如,可以是用于對(duì)新聞文件進(jìn)行定期更新的定時(shí)任務(wù)。并且,接收到的定時(shí)任務(wù)包括:至少一個(gè)單任務(wù),和/或,至少一個(gè)任務(wù)類;其中,每個(gè)任務(wù)類包括多個(gè)提醒周期相同的單任務(wù)。具體實(shí)現(xiàn)時(shí),單任務(wù)通過task表示,任務(wù)類通過category表示,并且,一個(gè)category中可以包含多個(gè)提醒周期相同的task。通過任務(wù)類能夠便于用戶快速加入多個(gè)相同提醒周期的單任務(wù)。具體的,task的周期會(huì)繼承其所屬的category的周期。例如,可以通過如下代碼實(shí)現(xiàn)任務(wù)類以及單任務(wù)的添加:
add_category(category_name,period)
add_task(task_name,category_name,begin_time)
由此可見,當(dāng)接收到的定時(shí)任務(wù)為任務(wù)類時(shí),通過獲取period參數(shù)值即可確定該任務(wù)類中包含的全部任務(wù)的提醒周期。當(dāng)接收到的定時(shí)任務(wù)為單任務(wù)時(shí),通過category_name參數(shù)值可確定該單任務(wù)所屬的任務(wù)類,并進(jìn)一步根據(jù)任務(wù)類中包含的period參數(shù)值確定該單任務(wù)的提醒周期。并且,根據(jù)task_name參數(shù)可唯一地確定一個(gè)單任務(wù),通過begin_time參數(shù)可確定該單任務(wù)的任務(wù)起始時(shí)間。
另外,接收到的定時(shí)任務(wù)既可以是一個(gè),也可以是多個(gè)。當(dāng)接收到的定時(shí)任務(wù)為多個(gè)時(shí),分別確定每個(gè)定時(shí)任務(wù)的提醒周期。例如,接收到的定時(shí)任務(wù)為3個(gè)定時(shí)更新的單任務(wù)task,2個(gè)定時(shí)刪除的任務(wù)類category,則通過上述方法可分別確定3個(gè)單任務(wù)的提醒周期和2個(gè)任務(wù)類的提醒周期。
步驟s220:查詢是否存在與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組;若查詢結(jié)果為是,執(zhí)行步驟s230;若查詢結(jié)果為否,執(zhí)行步驟s240。
由于接收到的定時(shí)任務(wù)可以為單個(gè)或多個(gè),當(dāng)接收到的定時(shí)任務(wù)為多個(gè)時(shí),分別查詢每個(gè)定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,對(duì)查詢到存在對(duì)應(yīng)的定時(shí)任務(wù)組的定時(shí)任務(wù)執(zhí)行步驟s230,對(duì)未查詢到對(duì)應(yīng)的定時(shí)任務(wù)組的定時(shí)任務(wù)執(zhí)行步驟s240。由于接收到的定時(shí)任務(wù)為多個(gè)時(shí),本步驟可以看成執(zhí)行多次查詢是否存在與接收到的單個(gè)定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的操作,因此,本步驟將以接收到單個(gè)定時(shí)任務(wù)為例來做詳細(xì)闡述。另外,當(dāng)接收到的定時(shí)任務(wù)為多個(gè),且針對(duì)多個(gè)定時(shí)任務(wù)執(zhí)行多次查詢操作時(shí),既可以由單線程串行執(zhí)行的方式進(jìn)行,也可以由多線程并行執(zhí)行的方式執(zhí)行。其中,單線程的優(yōu)勢(shì)在于順序執(zhí)行、不易遺漏、可靠性較高,因此,在系統(tǒng)對(duì)可靠性要求較高的場(chǎng)合中可采用單線程方式;多線程的優(yōu)勢(shì)在于并發(fā)執(zhí)行、執(zhí)行速度更快、效率更高,因此,在系統(tǒng)對(duì)響應(yīng)速度要求較高的場(chǎng)合中可采用多線程方式。
在步驟s210確定了接收到的定時(shí)任務(wù)的提醒周期后,進(jìn)一步查詢系統(tǒng)中是否存在與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組。具體地,查詢系統(tǒng)中是否存在與接收到的定時(shí)任務(wù)的提醒周期相同的定時(shí)任務(wù)組。若查詢結(jié)果為是,執(zhí)行步驟s230;若查詢結(jié)果為否,執(zhí)行步驟s240。
具體地,每個(gè)定時(shí)任務(wù)組都有其唯一的提醒周期,每個(gè)定時(shí)任務(wù)組中的所有定時(shí)任務(wù)的提醒周期都相同??蛇x的,可以由一個(gè)工作線程負(fù)責(zé)一個(gè)定時(shí)任務(wù)組中的所有定時(shí)任務(wù)的提醒,即同一個(gè)工作線程負(fù)責(zé)的所有的定時(shí)任務(wù)的提醒周期均相同。由于考慮到定時(shí)任務(wù)的提醒效率,同一提醒周期的定時(shí)任務(wù)可分屬于不同的定時(shí)任務(wù)組,由不同的工作線程來維護(hù),該不同的工作線程可進(jìn)行并發(fā)處理,所以不同的定時(shí)任務(wù)組的提醒周期可以不同,也可以相同,但同一定時(shí)任務(wù)組中的所有定時(shí)任務(wù)的提醒周期均相同。
鑒于上述情況,本步驟中查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)存在以下兩種情形(以接收到的定時(shí)任務(wù)為單個(gè)為例):
情形一:
當(dāng)每個(gè)定時(shí)任務(wù)組的提醒周期均不相同時(shí),則查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)為1個(gè)或0個(gè)。當(dāng)查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)為1個(gè)時(shí),說明存在與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,則執(zhí)行步驟s230;當(dāng)查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)為0個(gè)時(shí),說明不存在與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,則執(zhí)行步驟s240。
情形二:
當(dāng)至少有兩個(gè)定時(shí)任務(wù)組的提醒周期相同時(shí),則查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)可能大于或等于1個(gè),也可能為0個(gè)。當(dāng)查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)大于或等于1個(gè)時(shí),說明存在與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,則執(zhí)行步驟s230;當(dāng)查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)為0個(gè)時(shí),說明不存在與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,則執(zhí)行步驟s240。
步驟s230:將接收到的定時(shí)任務(wù)添加到查詢到的定時(shí)任務(wù)組中。
當(dāng)接收到的定時(shí)任務(wù)為多個(gè)時(shí),分別針對(duì)每個(gè)定時(shí)任務(wù),將每個(gè)定時(shí)任務(wù)合并到與其提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中;當(dāng)接收到的定時(shí)任務(wù)為單個(gè)時(shí),則將該定時(shí)任務(wù)添加到查詢到的定時(shí)任務(wù)組中。本步驟將以接收到的定時(shí)任務(wù)為單個(gè)為例,具體闡明將接收到的定時(shí)任務(wù)添加到查詢到的定時(shí)任務(wù)組中的實(shí)現(xiàn)過程。
當(dāng)步驟s220查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)等于1個(gè)時(shí),則可將該定時(shí)任務(wù)添加到該唯一的定時(shí)任務(wù)組中??蛇x的,當(dāng)該唯一的定時(shí)任務(wù)組中的定時(shí)任務(wù)數(shù)量達(dá)到某一閾值時(shí),也可執(zhí)行步驟s240。例如,若接收到的定時(shí)任務(wù)task1的提醒周期為5分鐘,查詢到的提醒周期為5分鐘的定時(shí)任務(wù)組為w1,通過工作線程worker1維護(hù)該定時(shí)任務(wù)組w1中的所有定時(shí)任務(wù)的提醒,則可將task1添加到w1中,即由worker1負(fù)責(zé)task1的提醒;或者,當(dāng)為提高定時(shí)任務(wù)的處理效率,定時(shí)任務(wù)組w1中預(yù)設(shè)的定時(shí)任務(wù)的個(gè)數(shù)上限為10000個(gè),若接收到task1后查詢到與其對(duì)應(yīng)的定時(shí)任務(wù)組為w1,而此時(shí)w1中的定時(shí)任務(wù)的個(gè)數(shù)已經(jīng)達(dá)到上限,則可執(zhí)行步驟s240,重新建立一個(gè)定時(shí)任務(wù)組,該定時(shí)任務(wù)組的更新周期與task1的更新周期相同。
當(dāng)步驟s220查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)大于1個(gè)時(shí),可將該定時(shí)任務(wù)添加到任意與該定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中;也可以根據(jù)與該定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中的定時(shí)任務(wù)數(shù)量,將該定時(shí)任務(wù)添加到定時(shí)任務(wù)數(shù)量較少的定時(shí)任務(wù)組中;又或者,當(dāng)查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的多個(gè)定時(shí)任務(wù)組中的定時(shí)任務(wù)數(shù)量達(dá)到某一閾值時(shí),也可執(zhí)行步驟s240。
具體地,本實(shí)施例中每個(gè)定時(shí)任務(wù)組有其與之對(duì)應(yīng)的有序任務(wù)集合,每個(gè)定時(shí)任務(wù)組中的所有定時(shí)任務(wù)均存儲(chǔ)在其對(duì)應(yīng)的有序任務(wù)集合中,其中,有序任務(wù)集合既可以采用zset數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),也可以通過數(shù)據(jù)隊(duì)列、消息隊(duì)列等各種形式實(shí)現(xiàn),本發(fā)明對(duì)有序任務(wù)集合的具體形式不做限定。所以將接收到的定時(shí)任務(wù)添加到定時(shí)任務(wù)組中具體包括將接收到的定時(shí)任務(wù)存儲(chǔ)在定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中。舉例來說,若將單任務(wù)task1或任務(wù)類category_1添加到定時(shí)任務(wù)組w1,則將單任務(wù)task1或任務(wù)類category_1中的所有定時(shí)任務(wù)均存儲(chǔ)在定時(shí)任務(wù)組w1對(duì)應(yīng)的有序任務(wù)集合中,當(dāng)有序任務(wù)集合采用zset數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),并且其存儲(chǔ)元素以鍵值對(duì)(key-value)進(jìn)行存儲(chǔ)時(shí),可將單任務(wù)task1的名稱或任務(wù)類category_1中的所有定時(shí)任務(wù)的名稱存儲(chǔ)為zset中的各個(gè)key。
可選的,定時(shí)任務(wù)組可進(jìn)一步包括根據(jù)任務(wù)屬性信息劃分的至少一個(gè)子任務(wù)組,且定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合進(jìn)一步包括至少一個(gè)與子任務(wù)組一一對(duì)應(yīng)的子任務(wù)集合。子任務(wù)集合也可以采用zset數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)隊(duì)列、或消息隊(duì)列等各種形式實(shí)現(xiàn),本發(fā)明對(duì)子任務(wù)集合的具體形式也不做限定。其中,任務(wù)屬性信息包括任務(wù)提交方信息、任務(wù)起始時(shí)間信息、以及任務(wù)類型信息等,則將定時(shí)任務(wù)添加到定時(shí)任務(wù)組中具體為根據(jù)該任務(wù)的任務(wù)屬性信息將該定時(shí)任務(wù)合并到與其對(duì)應(yīng)的子任務(wù)組中,即將定時(shí)任務(wù)存儲(chǔ)到與其對(duì)應(yīng)的子任務(wù)組對(duì)應(yīng)的子任務(wù)集合中。舉例來說,定時(shí)任務(wù)組w1的提醒周期為5分鐘,其可根據(jù)任務(wù)提交方信息劃分為3個(gè)子任務(wù)組c1、c2、c3,其中,c1、c2、c3中的定時(shí)任務(wù)的提交方分別為用戶1、用戶2、用戶3,并且子任務(wù)組c1、c2、c3對(duì)應(yīng)的子任務(wù)集合為zset1、zset2、zset3,zset1、zset2、zset3分別存儲(chǔ)子任務(wù)組c1、c2、c3的定時(shí)任務(wù)。當(dāng)接收到用戶2提交的定時(shí)任務(wù)名稱為t23,提醒周期為5分鐘的任務(wù)類,則與該定時(shí)任務(wù)對(duì)應(yīng)的子任務(wù)組為定時(shí)任務(wù)組w1中的子任務(wù)組c2,則將該任務(wù)類中所有的定時(shí)任務(wù)存儲(chǔ)在zset2中。采用該種方法可以便于針對(duì)不同的任務(wù)提交方信息對(duì)定時(shí)任務(wù)進(jìn)行維護(hù),例如,當(dāng)不再對(duì)某個(gè)用戶提交的定時(shí)任務(wù)進(jìn)行提醒時(shí),可以直接刪除該任務(wù)提交方信息對(duì)應(yīng)的子任務(wù)組。又例如,也可根據(jù)任務(wù)起始時(shí)間信息、任務(wù)類型信息等將定時(shí)任務(wù)組劃分為一系列的子任務(wù)組,從而達(dá)到便于對(duì)定時(shí)任務(wù)組中的定時(shí)任務(wù)進(jìn)行維護(hù)的目的。
步驟s240:創(chuàng)建與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,將接收到的定時(shí)任務(wù)添加到創(chuàng)建的定時(shí)任務(wù)組中,并創(chuàng)建與該定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器及有序任務(wù)集合。
若步驟s220中不存在與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,則創(chuàng)建與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,將接收到的定時(shí)任務(wù)添加到創(chuàng)建的定時(shí)任務(wù)組中,并創(chuàng)建與該定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器及有序任務(wù)集合。
其中,為節(jié)省系統(tǒng)開銷,可以由一個(gè)工作線程來維護(hù)一個(gè)定時(shí)任務(wù)組,一個(gè)定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器的數(shù)量?jī)H為一個(gè),通過多次調(diào)用該定時(shí)器能夠?qū)Χ〞r(shí)任務(wù)組中包含的多個(gè)定時(shí)任務(wù)分別進(jìn)行定時(shí)提醒,所以在創(chuàng)建了定時(shí)任務(wù)組后,應(yīng)創(chuàng)建與之對(duì)應(yīng)的定時(shí)器。
并且,由于每個(gè)定時(shí)任務(wù)組中的所有定時(shí)任務(wù)均存儲(chǔ)在其對(duì)應(yīng)的有序任務(wù)集合中,并且定時(shí)任務(wù)在有序任務(wù)集合中是按照一定的順序進(jìn)行存儲(chǔ)的,所以在創(chuàng)建了定時(shí)任務(wù)組后,應(yīng)創(chuàng)建與之對(duì)應(yīng)的有序任務(wù)集合。將接收到的定時(shí)任務(wù)添加到創(chuàng)建的定時(shí)任務(wù)組中,具體地,將接收到的定時(shí)任務(wù)存儲(chǔ)在創(chuàng)建的定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中??蛇x的,也可根據(jù)任務(wù)屬性信息將定時(shí)任務(wù)組進(jìn)一步劃分為至少一個(gè)子任務(wù)組,則進(jìn)一步創(chuàng)建與該子任務(wù)組一一對(duì)應(yīng)的子任務(wù)集合,則根據(jù)接收到的定時(shí)任務(wù)的任務(wù)屬性信息將其添加到創(chuàng)建的定時(shí)任務(wù)組的相應(yīng)的子任務(wù)組中,將其存儲(chǔ)在相應(yīng)的子任務(wù)組對(duì)應(yīng)的子任務(wù)集合中。
步驟s250:將定時(shí)任務(wù)的提醒時(shí)間信息記錄到與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中。
本步驟中定時(shí)任務(wù)可以為單個(gè)也可以為多個(gè),當(dāng)有多個(gè)定時(shí)任務(wù)時(shí)分別確定每個(gè)定時(shí)任務(wù)所在的定時(shí)任務(wù)組,并將該定時(shí)任務(wù)的提醒時(shí)間信息記錄到該定時(shí)任務(wù)所在的定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中。
其中,定時(shí)任務(wù)的提醒時(shí)間信息用于確定定時(shí)任務(wù)的具體提醒時(shí)間,因此,只要是能夠用于確定定時(shí)任務(wù)的具體提醒時(shí)間的信息均可應(yīng)用于本發(fā)明。例如,定時(shí)任務(wù)的提醒時(shí)間信息可以包括以下中的至少一個(gè):任務(wù)起始時(shí)間、下次提醒時(shí)間以及有序任務(wù)集合中相鄰的兩個(gè)定時(shí)任務(wù)之間的時(shí)間差。例如,通過判斷任務(wù)的起始時(shí)間和提醒周期,可以得出定時(shí)任務(wù)的具體提醒時(shí)間;又或者當(dāng)獲知相鄰的兩個(gè)定時(shí)任務(wù)之間的時(shí)間差,若當(dāng)前某一定時(shí)任務(wù)達(dá)到提醒周期,則可獲知與其相鄰的下個(gè)定時(shí)任務(wù)的提醒周期。
在上述步驟中已闡明每個(gè)定時(shí)任務(wù)組均有其對(duì)應(yīng)的有序任務(wù)集合,有序任務(wù)集合中存儲(chǔ)有對(duì)應(yīng)的定時(shí)任務(wù)所包含的所有定時(shí)任務(wù),并且在有序任務(wù)集合中所有的定時(shí)任務(wù)是按照一定的存儲(chǔ)順序進(jìn)行存儲(chǔ)的。具體地,為了便于查詢和管理,有序任務(wù)集合中所有的定時(shí)任務(wù)可以按照定時(shí)任務(wù)提醒時(shí)間的先后順序進(jìn)行存儲(chǔ)。以zset數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)的有序任務(wù)集合為例,zset中的元素可以以鍵值對(duì)的方式進(jìn)行存儲(chǔ),則有序集合中的各個(gè)定時(shí)任務(wù)的名稱可以存儲(chǔ)為zset中的各個(gè)key,而各個(gè)定時(shí)任務(wù)的更新提醒時(shí)間信息可以記錄為各個(gè)key對(duì)應(yīng)的value。并且,又由于zset為一有序集合,其有序體現(xiàn)在其每個(gè)存儲(chǔ)元素都有表征其順序的權(quán)重值,而在本實(shí)施例中,定時(shí)任務(wù)應(yīng)按照定時(shí)任務(wù)提醒時(shí)間的先后順序進(jìn)行存儲(chǔ),所以zset中每個(gè)存儲(chǔ)元素的順序權(quán)重值可以按照其value中存儲(chǔ)的更新提醒時(shí)間信息來進(jìn)行設(shè)置,從而達(dá)到有序集合中定時(shí)任務(wù)的有序排列。
可選的,當(dāng)定時(shí)任務(wù)組含有至少一個(gè)子任務(wù)組時(shí),可根據(jù)定時(shí)任務(wù)的任務(wù)屬性信息將該定時(shí)任務(wù)的提醒時(shí)間信息記錄在相應(yīng)的子任務(wù)組對(duì)應(yīng)的子任務(wù)集合中。
步驟s260:根據(jù)與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合,調(diào)用與定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器對(duì)定時(shí)任務(wù)組中包含的各個(gè)定時(shí)任務(wù)進(jìn)行定時(shí)提醒。
其中,在定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中,按照各個(gè)定時(shí)任務(wù)的具體提醒時(shí)間的先后順序記錄了各個(gè)定時(shí)任務(wù)的提醒時(shí)間信息,因此,通過查詢與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合,能夠快速高效地確定出該定時(shí)任務(wù)組所包含的定時(shí)任務(wù)的數(shù)量以及各個(gè)定時(shí)任務(wù)的具體提醒時(shí)間。
可選的,為了節(jié)約系統(tǒng)開銷,每個(gè)定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器的數(shù)量?jī)H為一個(gè),并且,每個(gè)定時(shí)任務(wù)組分別對(duì)應(yīng)于一個(gè)工作線程,則每個(gè)工作線程只對(duì)應(yīng)一個(gè)定時(shí)器,則通過工作線程可以多次調(diào)用其對(duì)應(yīng)的定時(shí)器,從而能夠?qū)Χ〞r(shí)任務(wù)組中包含的多個(gè)定時(shí)任務(wù)分別進(jìn)行定時(shí)提醒。例如,定時(shí)器可實(shí)時(shí)監(jiān)控有序任務(wù)集合中提醒時(shí)間最早的定時(shí)任務(wù),當(dāng)提醒時(shí)間最早的定時(shí)任務(wù)還未到提醒時(shí)間時(shí)說明其他的定時(shí)任務(wù)也未達(dá)到提醒時(shí)間;當(dāng)提醒時(shí)間最早的定時(shí)任務(wù)達(dá)到提醒時(shí)間時(shí),則對(duì)該定時(shí)任務(wù)進(jìn)行提醒,并判斷下一個(gè)提醒時(shí)間最早的定時(shí)任務(wù)。具體實(shí)現(xiàn)時(shí),可以根據(jù)定時(shí)任務(wù)組中包含的定時(shí)任務(wù)的數(shù)量,定義多個(gè)全局變量,每個(gè)全局變量分別對(duì)應(yīng)于一個(gè)定時(shí)任務(wù),通過在該定時(shí)任務(wù)組所對(duì)應(yīng)的定時(shí)器里累加變量的方式實(shí)現(xiàn)多次調(diào)用該定時(shí)器的目的。
本發(fā)明對(duì)上述的各個(gè)步驟的具體執(zhí)行順序不做限定,本領(lǐng)域技術(shù)人員可以根據(jù)需要靈活調(diào)整各個(gè)步驟之間的先后順序。通常情況下,每當(dāng)接收到新的定時(shí)任務(wù)時(shí)則自動(dòng)觸發(fā)步驟s210至步驟s250,以便將新的定時(shí)任務(wù)添加到對(duì)應(yīng)的定時(shí)任務(wù)組中,并根據(jù)新添加的定時(shí)任務(wù)對(duì)相應(yīng)的定時(shí)任務(wù)組所對(duì)應(yīng)的有序任務(wù)集合進(jìn)行更新。另外,步驟s260既可以在每次執(zhí)行完步驟s250后執(zhí)行,也可以獨(dú)立于其他步驟而根據(jù)預(yù)設(shè)周期自動(dòng)地周期性執(zhí)行。
可選的,在步驟s250之后,還可以進(jìn)一步包括如下步驟:
步驟s270:根據(jù)接收到的任務(wù)更改指令中包含的任務(wù)屬性信息,確定與任務(wù)屬性信息對(duì)應(yīng)的子任務(wù)集合;根據(jù)任務(wù)更改指令的指令類型,對(duì)子任務(wù)集合進(jìn)行相應(yīng)類型的更改。
其中,指令類型包括:刪除類型、新增類型和/或修改類型。當(dāng)接收到任務(wù)更改指令時(shí),根據(jù)任務(wù)更改指令中包含的任務(wù)屬性信息,如任務(wù)提交方信息、任務(wù)起始時(shí)間信息、以及任務(wù)類型信息等,可以快速地查找到相應(yīng)的子任務(wù)集合,從而根據(jù)任務(wù)更改指令對(duì)子任務(wù)集合進(jìn)行相應(yīng)類型的更改。
例如,定時(shí)任務(wù)組中按照信息提交方信息將其劃分為一系列的子任務(wù)集合,當(dāng)不再對(duì)某一信息提交方提交的定時(shí)任務(wù)進(jìn)行提醒服務(wù),則需要?jiǎng)h除定時(shí)任務(wù)組中所有由該信息提交方提交的定時(shí)任務(wù),則可通過接收到的任務(wù)更改指令中包含的該信息提交方的信息(如用戶標(biāo)識(shí)等),查找到對(duì)應(yīng)的子任務(wù)集合,從而快速地將該子任務(wù)集合進(jìn)行刪除。
又例如,定時(shí)任務(wù)組中按照任務(wù)起始時(shí)間信息將其劃分為一系列的子任務(wù)集合,如起始時(shí)間信息為1月的劃分為一個(gè)子任務(wù)集合t1,起始時(shí)間信息為2月的劃分為另一個(gè)子任務(wù)集合t2。若需對(duì)任務(wù)起始時(shí)間信息為1月12號(hào)至1月15號(hào)的定時(shí)任務(wù)的進(jìn)行修改,則可通過接收到的任務(wù)更改指令中包含的該起始時(shí)間信息,查找到對(duì)應(yīng)的子任務(wù)集合t1,從而快速地定位目標(biāo)定時(shí)任務(wù),并對(duì)目標(biāo)定時(shí)任務(wù)進(jìn)行相應(yīng)的修改。
由此可見,通過對(duì)相同提醒周期的定時(shí)任務(wù)進(jìn)行合并,并通過與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中記錄的各個(gè)定時(shí)任務(wù)的提醒時(shí)間信息來確定定時(shí)任務(wù)組中每個(gè)定時(shí)任務(wù)的具體提醒時(shí)間以進(jìn)行提醒,從而降低了定時(shí)器的數(shù)量、減少了系統(tǒng)開銷,并避免了因系統(tǒng)開銷過大而導(dǎo)致的系統(tǒng)崩潰、延時(shí)過長(zhǎng)等一系列問題。另外,通過根據(jù)任務(wù)屬性信息將有序任務(wù)集合劃分為至少一個(gè)子任務(wù)集合,加快了定時(shí)任務(wù)的查找速度,更加便于對(duì)各個(gè)定時(shí)任務(wù)的更改及管理。另外,由于有序任務(wù)集合中記錄的各個(gè)定時(shí)任務(wù)是按照提醒時(shí)間的先后排列的,若提醒時(shí)間靠前的定時(shí)任務(wù)尚未到達(dá)提醒時(shí)間,則無需監(jiān)控提醒時(shí)間靠后的定時(shí)任務(wù),因此,只需針對(duì)距離當(dāng)前時(shí)間最近的定時(shí)任務(wù)進(jìn)行監(jiān)控即可,大幅降低了監(jiān)控開銷。
圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例提供的一種定時(shí)任務(wù)的提醒裝置的結(jié)構(gòu)框圖。如圖3所示,該裝置包括:確定模塊31、合并模塊32、記錄模塊33、以及提醒模塊34。
確定模塊31適于確定接收到的定時(shí)任務(wù)的提醒周期。
本實(shí)施例中的定時(shí)任務(wù)包括各種類型的定時(shí)任務(wù),例如,可以是用于對(duì)新聞文件進(jìn)行定期更新的定時(shí)任務(wù)。并且,接收到的定時(shí)任務(wù)既可以是一個(gè),也可以是多個(gè)。當(dāng)接收到的定時(shí)任務(wù)為多個(gè)時(shí),分別確定每個(gè)定時(shí)任務(wù)的提醒周期。
合并模塊32適于將定時(shí)任務(wù)合并到與提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中。
根據(jù)確定模塊31確定接收到的定時(shí)任務(wù)的提醒周期,將定時(shí)任務(wù)合并到與該提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中。
記錄模塊33適于將定時(shí)任務(wù)的提醒時(shí)間信息記錄到與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中。
其中,定時(shí)任務(wù)的提醒時(shí)間信息用于確定定時(shí)任務(wù)的具體提醒時(shí)間,因此,只要是能夠用于確定定時(shí)任務(wù)的具體提醒時(shí)間的信息均可應(yīng)用于本發(fā)明。例如,定時(shí)任務(wù)的提醒時(shí)間信息可以包括以下中的至少一個(gè):任務(wù)起始時(shí)間、下次提醒時(shí)間以及有序任務(wù)集合中相鄰的兩個(gè)定時(shí)任務(wù)之間的時(shí)間差。
為了便于查詢,與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中按照各個(gè)定時(shí)任務(wù)的具體提醒時(shí)間的先后順序依次存儲(chǔ)該定時(shí)任務(wù)組所包含的全部定時(shí)任務(wù)。其中,有序任務(wù)集合既可以采用zset數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),也可以通過數(shù)據(jù)隊(duì)列、消息隊(duì)列等各種形式實(shí)現(xiàn),本發(fā)明對(duì)有序任務(wù)集合的具體形式不做限定,只要能夠?qū)崿F(xiàn)有序存儲(chǔ)并快速查詢的目的即可。
提醒模塊34適于根據(jù)與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合,調(diào)用與定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器對(duì)定時(shí)任務(wù)組中包含的各個(gè)定時(shí)任務(wù)進(jìn)行定時(shí)提醒。
其中,在定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中,按照各個(gè)定時(shí)任務(wù)的具體提醒時(shí)間的先后順序記錄了各個(gè)定時(shí)任務(wù)的提醒時(shí)間信息,因此,通過查詢與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合,能夠快速高效地確定出該定時(shí)任務(wù)組所包含的定時(shí)任務(wù)的數(shù)量以及各個(gè)定時(shí)任務(wù)的具體提醒時(shí)間。
可選的,為了節(jié)約系統(tǒng)開銷,一個(gè)定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器的數(shù)量?jī)H為一個(gè),通過多次調(diào)用該定時(shí)器能夠?qū)Χ〞r(shí)任務(wù)組中包含的多個(gè)定時(shí)任務(wù)分別進(jìn)行定時(shí)提醒。
由此可見,通過對(duì)相同提醒周期的定時(shí)任務(wù)進(jìn)行合并,并通過與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中記錄的各個(gè)定時(shí)任務(wù)的提醒時(shí)間信息來確定定時(shí)任務(wù)組中每個(gè)定時(shí)任務(wù)的具體提醒時(shí)間以進(jìn)行提醒,從而降低了定時(shí)器的數(shù)量、減少了系統(tǒng)開銷,并避免了因系統(tǒng)開銷過大而導(dǎo)致的系統(tǒng)崩潰、延時(shí)過長(zhǎng)等一系列問題。
圖4示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例提供的一種定時(shí)任務(wù)的提醒裝置的結(jié)構(gòu)框圖。如圖4所示,該裝置包括:確定模塊41、查詢模塊42、合并模塊43、創(chuàng)建模塊44、記錄模塊45、以及提醒模塊46。
確定模塊41適于確定接收到的定時(shí)任務(wù)的提醒周期。
本實(shí)施例中的定時(shí)任務(wù)包括各種類型的定時(shí)任務(wù),例如,可以是用于對(duì)新聞文件進(jìn)行定期更新的定時(shí)任務(wù)。并且,接收到的定時(shí)任務(wù)包括:至少一個(gè)單任務(wù),和/或,至少一個(gè)任務(wù)類;其中,每個(gè)任務(wù)類包括多個(gè)提醒周期相同的單任務(wù)。具體實(shí)現(xiàn)時(shí),單任務(wù)通過task表示,任務(wù)類通過category表示,并且,一個(gè)category中可以包含多個(gè)提醒周期相同的task。通過任務(wù)類能夠便于用戶快速加入多個(gè)相同提醒周期的單任務(wù)。具體的,task的周期會(huì)繼承其所屬的category的周期。例如,可以通過如下代碼實(shí)現(xiàn)任務(wù)類以及單任務(wù)的添加:
add_category(category_name,period)
add_task(task_name,category_name,begin_time)
由此可見,當(dāng)接收到的定時(shí)任務(wù)為任務(wù)類時(shí),通過獲取period參數(shù)值即可確定該任務(wù)類中包含的全部任務(wù)的提醒周期。當(dāng)接收到的定時(shí)任務(wù)為單任務(wù)時(shí),通過category_name參數(shù)值可確定該單任務(wù)所屬的任務(wù)類,并進(jìn)一步根據(jù)任務(wù)類中包含的period參數(shù)值確定該單任務(wù)的提醒周期。并且,根據(jù)task_name參數(shù)可唯一地確定一個(gè)單任務(wù),通過begin_time參數(shù)可確定該單任務(wù)的任務(wù)起始時(shí)間。
另外,接收到的定時(shí)任務(wù)既可以是一個(gè),也可以是多個(gè)。當(dāng)接收到的定時(shí)任務(wù)為多個(gè)時(shí),分別確定每個(gè)定時(shí)任務(wù)的提醒周期。例如,接收到的定時(shí)任務(wù)為3個(gè)定時(shí)更新的單任務(wù)task,2個(gè)定時(shí)刪除的任務(wù)類category,則通過上述方法可分別確定3個(gè)單任務(wù)的提醒周期和2個(gè)任務(wù)類的提醒周期。
查詢模塊42適于查詢是否存在與提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組。
由于接收到的定時(shí)任務(wù)可以為單個(gè)或多個(gè),當(dāng)接收到的定時(shí)任務(wù)為多個(gè)時(shí),分別查詢每個(gè)定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,對(duì)查詢到存在對(duì)應(yīng)的定時(shí)任務(wù)組通過合并模塊43將其合并到查詢到的定時(shí)任務(wù)組中;對(duì)未查詢到對(duì)應(yīng)的定時(shí)任務(wù)組的定時(shí)任務(wù)通過創(chuàng)建模塊44創(chuàng)建與該提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組。由于接收到的定時(shí)任務(wù)為多個(gè)時(shí),可以看成執(zhí)行多次查詢是否存在與接收到的單個(gè)定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的操作,因此,本模塊中將以接收到單個(gè)定時(shí)任務(wù)為例來做詳細(xì)闡述。另外,當(dāng)接收到的定時(shí)任務(wù)為多個(gè),且針對(duì)多個(gè)定時(shí)任務(wù)執(zhí)行多次查詢操作時(shí),既可以由單線程串行執(zhí)行的方式進(jìn)行,也可以由多線程并行執(zhí)行的方式執(zhí)行。其中,單線程的優(yōu)勢(shì)在于順序執(zhí)行、不易遺漏、可靠性較高,因此,在系統(tǒng)對(duì)可靠性要求較高的場(chǎng)合中可采用單線程方式;多線程的優(yōu)勢(shì)在于并發(fā)執(zhí)行、執(zhí)行速度更快、效率更高,因此,在系統(tǒng)對(duì)響應(yīng)速度要求較高的場(chǎng)合中可采用多線程方式。
在確定模塊41確定了接收到的定時(shí)任務(wù)的提醒周期后,進(jìn)一步查詢系統(tǒng)中是否存在與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組。具體地,查詢系統(tǒng)中是否存在與接收到的定時(shí)任務(wù)的提醒周期相同的定時(shí)任務(wù)組。若查詢結(jié)果為是,則執(zhí)行合并模塊;若查詢結(jié)果為否,則執(zhí)行創(chuàng)建模塊。
具體地,每個(gè)定時(shí)任務(wù)組都有其唯一的提醒周期,每個(gè)定時(shí)任務(wù)組中的所有定時(shí)任務(wù)的提醒周期都相同??蛇x的,可以由一個(gè)工作線程負(fù)責(zé)一個(gè)定時(shí)任務(wù)組中的所有定時(shí)任務(wù)的提醒,即同一個(gè)工作線程負(fù)責(zé)的所有的定時(shí)任務(wù)的提醒周期均相同。由于考慮到定時(shí)任務(wù)的提醒效率,同一提醒周期的定時(shí)任務(wù)可分屬于不同的定時(shí)任務(wù)組,由不同的工作線程來維護(hù),該不同的工作線程可進(jìn)行并發(fā)處理,所以不同的定時(shí)任務(wù)組的提醒周期可以不同,也可以相同,但同一定時(shí)任務(wù)組中的所有定時(shí)任務(wù)的提醒周期均相同。
鑒于上述情況,本模塊中查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)存在以下兩種情形(以接收到的定時(shí)任務(wù)為單個(gè)為例):
情形一:
當(dāng)每個(gè)定時(shí)任務(wù)組的提醒周期均不相同時(shí),則查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)為1個(gè)或0個(gè)。當(dāng)查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)為1個(gè)時(shí),說明存在與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,則執(zhí)行合并模塊43;當(dāng)查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)為0個(gè)時(shí),說明不存在與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,則執(zhí)行創(chuàng)建模塊44。
情形二:
當(dāng)至少有兩個(gè)定時(shí)任務(wù)組的提醒周期相同時(shí),則查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)可能大于或等于1個(gè),也可能為0個(gè)。當(dāng)查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)大于或等于1個(gè)時(shí),說明存在與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,則執(zhí)行合并模塊43;當(dāng)查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)為0個(gè)時(shí),說明不存在與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,則執(zhí)行創(chuàng)建模塊44。
合并模塊43適于當(dāng)查詢模塊的查詢結(jié)果為是時(shí),將定時(shí)任務(wù)添加到查詢到的定時(shí)任務(wù)組中。
當(dāng)接收到的定時(shí)任務(wù)為多個(gè)時(shí),合并模塊43進(jìn)一步適于分別確定每個(gè)定時(shí)任務(wù)的提醒周期;分別針對(duì)每個(gè)定時(shí)任務(wù),將該定時(shí)任務(wù)合并到與其提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中。當(dāng)接收到的定時(shí)任務(wù)為單個(gè)時(shí),則將該定時(shí)任務(wù)添加到查詢到的定時(shí)任務(wù)組中。本模塊將以接收到的定時(shí)任務(wù)為單個(gè)為例,具體闡明將接收到的定時(shí)任務(wù)添加到查詢到的定時(shí)任務(wù)組中的實(shí)現(xiàn)過程。
當(dāng)查詢模塊42查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)等于1個(gè)時(shí),則可將該定時(shí)任務(wù)添加到該唯一的定時(shí)任務(wù)組中??蛇x的,當(dāng)該唯一的定時(shí)任務(wù)組中的定時(shí)任務(wù)數(shù)量達(dá)到某一閾值時(shí),也可執(zhí)行創(chuàng)建模塊44。例如,若接收到的定時(shí)任務(wù)task1的提醒周期為5分鐘,查詢到的提醒周期為5分鐘的定時(shí)任務(wù)組為w1,通過工作線程worker1維護(hù)該定時(shí)任務(wù)組w1中的所有定時(shí)任務(wù)的提醒,則可將task1添加到w1中,即由worker1負(fù)責(zé)task1的提醒;或者,當(dāng)為提高定時(shí)任務(wù)的處理效率,定時(shí)任務(wù)組w1中預(yù)設(shè)的定時(shí)任務(wù)的個(gè)數(shù)上限為10000個(gè),若接收到task1后查詢到與其對(duì)應(yīng)的定時(shí)任務(wù)組為w1,而此時(shí)w1中的定時(shí)任務(wù)的個(gè)數(shù)已經(jīng)達(dá)到上限,則可執(zhí)行創(chuàng)建模塊44,重新建立一個(gè)定時(shí)任務(wù)組,該定時(shí)任務(wù)組的更新周期與task1的更新周期相同。
當(dāng)查詢模塊42查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組的個(gè)數(shù)大于1個(gè)時(shí),可將該定時(shí)任務(wù)添加到任意與該定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中;也可以根據(jù)與該定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中的定時(shí)任務(wù)數(shù)量,將該定時(shí)任務(wù)添加到定時(shí)任務(wù)數(shù)量較少的定時(shí)任務(wù)組中;又或者,當(dāng)查詢到的與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的多個(gè)定時(shí)任務(wù)組中的定時(shí)任務(wù)數(shù)量達(dá)到某一閾值時(shí),也可執(zhí)行創(chuàng)建模塊44。
具體地,本實(shí)施例中每個(gè)定時(shí)任務(wù)組有其與之對(duì)應(yīng)的有序任務(wù)集合,每個(gè)定時(shí)任務(wù)組中的所有定時(shí)任務(wù)均存儲(chǔ)在其對(duì)應(yīng)的有序任務(wù)集合中,其中,有序任務(wù)集合既可以采用zset數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),也可以通過數(shù)據(jù)隊(duì)列、消息隊(duì)列等各種形式實(shí)現(xiàn),本發(fā)明對(duì)有序任務(wù)集合的具體形式不做限定。所以將接收到的定時(shí)任務(wù)的添加到定時(shí)任務(wù)組中具體包括將接收到的定時(shí)任務(wù)存儲(chǔ)在定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中。舉例來說,若將單任務(wù)task1或任務(wù)類category_1添加到定時(shí)任務(wù)組w1,則將單任務(wù)task1或任務(wù)類category_1中的所有定時(shí)任務(wù)均存儲(chǔ)在定時(shí)任務(wù)組w1對(duì)應(yīng)的有序任務(wù)集合中,當(dāng)有序任務(wù)集合采用zset數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),并且其存儲(chǔ)元素以鍵值對(duì)(key-value)進(jìn)行存儲(chǔ)時(shí),可將單任務(wù)task1的名稱或任務(wù)類category_1中的所有定時(shí)任務(wù)的名稱存儲(chǔ)為zset中的各個(gè)key。
可選的,定時(shí)任務(wù)組可進(jìn)一步包括根據(jù)任務(wù)屬性信息劃分的至少一個(gè)子任務(wù)組,且定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合進(jìn)一步包括至少一個(gè)與子任務(wù)組一一對(duì)應(yīng)的子任務(wù)集合。子任務(wù)集合也可以采用zset數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)隊(duì)列、消息隊(duì)列等各種形式實(shí)現(xiàn),本發(fā)明對(duì)子任務(wù)集合的具體形式也不做限定。其中,任務(wù)屬性信息包括任務(wù)提交方信息、任務(wù)起始時(shí)間信息、以及任務(wù)類型信息等。
則合并模塊進(jìn)一步適于:確定定時(shí)任務(wù)的任務(wù)屬性信息,根據(jù)任務(wù)屬性信息將定時(shí)任務(wù)合并到對(duì)應(yīng)的子任務(wù)組中。
舉例來說,定時(shí)任務(wù)組w1的提醒周期為5分鐘,其可根據(jù)任務(wù)提交方信息劃分為3個(gè)子任務(wù)組c1、c2、c3,其中,c1、c2、c3中的定時(shí)任務(wù)的提交方分別為用戶1、用戶2、用戶3,并且子任務(wù)組c1、c2、c3對(duì)應(yīng)的子任務(wù)集合為zset1、zset2、zset3,zset1、zset2、zset3分別存儲(chǔ)子任務(wù)組c1、c2、c3的定時(shí)任務(wù)。當(dāng)接收到用戶2提交的定時(shí)任務(wù)名稱為t23,提醒周期為5分鐘的任務(wù)類,則與該定時(shí)任務(wù)對(duì)應(yīng)的子任務(wù)組為定時(shí)任務(wù)組w1中的子任務(wù)組c2,則將該任務(wù)類中所有的定時(shí)任務(wù)存儲(chǔ)在zset2中。采用該種方法可以便于針對(duì)不同的任務(wù)提交方信息對(duì)定時(shí)任務(wù)進(jìn)行維護(hù),例如,當(dāng)不再對(duì)某個(gè)用戶提交的定時(shí)任務(wù)進(jìn)行提醒時(shí),可以直接刪除該任務(wù)提交方信息對(duì)應(yīng)的子任務(wù)組。又例如,也可根據(jù)任務(wù)起始時(shí)間信息、任務(wù)類型信息等將定時(shí)任務(wù)組劃分為一系列的子任務(wù)組,從而達(dá)到便于對(duì)定時(shí)任務(wù)組中的定時(shí)任務(wù)進(jìn)行維護(hù)的目的。
創(chuàng)建模塊44適于若查詢模塊42的查詢結(jié)果為否時(shí),創(chuàng)建與提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,將定時(shí)任務(wù)添加到創(chuàng)建的定時(shí)任務(wù)組中,并創(chuàng)建與定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器及有序任務(wù)集合。
若查詢模塊42查詢結(jié)果中不存在與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,則創(chuàng)建與接收到的定時(shí)任務(wù)的提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,將接收到的定時(shí)任務(wù)添加到創(chuàng)建的定時(shí)任務(wù)組中,并創(chuàng)建與該定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器及有序任務(wù)集合。
其中,為節(jié)省系統(tǒng)開銷,可以由一個(gè)工作線程來維護(hù)一個(gè)定時(shí)任務(wù)組,一個(gè)定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器的數(shù)量?jī)H為一個(gè),通過多次調(diào)用該定時(shí)器能夠?qū)Χ〞r(shí)任務(wù)組中包含的多個(gè)定時(shí)任務(wù)分別進(jìn)行定時(shí)提醒,所以在創(chuàng)建了定時(shí)任務(wù)組后,應(yīng)創(chuàng)建與之對(duì)應(yīng)的定時(shí)器。
并且,由于每個(gè)定時(shí)任務(wù)組中的所有定時(shí)任務(wù)均存儲(chǔ)在其對(duì)應(yīng)的有序任務(wù)集合中,并且定時(shí)任務(wù)在有序任務(wù)集合中是按照一定的順序進(jìn)行存儲(chǔ)的,所以在創(chuàng)建了定時(shí)任務(wù)組后,應(yīng)創(chuàng)建與之對(duì)應(yīng)的有序任務(wù)集合。將接收到的定時(shí)任務(wù)添加到創(chuàng)建的定時(shí)任務(wù)組中,具體地,將接收到的定時(shí)任務(wù)存儲(chǔ)在創(chuàng)建的定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中??蛇x的,也可根據(jù)任務(wù)屬性信息將定時(shí)任務(wù)組進(jìn)一步劃分為至少一個(gè)子任務(wù)組,則進(jìn)一步創(chuàng)建與該子任務(wù)組一一對(duì)應(yīng)的子任務(wù)集合,則根據(jù)接收到的定時(shí)任務(wù)的任務(wù)屬性信息將其添加到創(chuàng)建的定時(shí)任務(wù)組的相應(yīng)的子任務(wù)組中,將其存儲(chǔ)在相應(yīng)的子任務(wù)組對(duì)應(yīng)的子任務(wù)集合中。
記錄模塊45適于將定時(shí)任務(wù)的提醒時(shí)間信息記錄到與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中。
本模塊中定時(shí)任務(wù)可以為單個(gè)也可以為多個(gè),當(dāng)有多個(gè)定時(shí)任務(wù)時(shí),記錄模塊45進(jìn)一步適于分別確定每個(gè)定時(shí)任務(wù)所在的定時(shí)任務(wù)組,并將該定時(shí)任務(wù)的提醒時(shí)間信息記錄到該定時(shí)任務(wù)所在的定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中。
其中,定時(shí)任務(wù)的提醒時(shí)間信息用于確定定時(shí)任務(wù)的具體提醒時(shí)間,因此,只要是能夠用于確定定時(shí)任務(wù)的具體提醒時(shí)間的信息均可應(yīng)用于本發(fā)明。例如,定時(shí)任務(wù)的提醒時(shí)間信息可以包括以下中的至少一個(gè):任務(wù)起始時(shí)間、下次提醒時(shí)間以及有序任務(wù)集合中相鄰的兩個(gè)定時(shí)任務(wù)之間的時(shí)間差。例如,通過判斷任務(wù)的起始時(shí)間和提醒周期,可以得出定時(shí)任務(wù)的具體提醒時(shí)間;又或者當(dāng)獲知相鄰的兩個(gè)定時(shí)任務(wù)之間的時(shí)間差,若當(dāng)前某一定時(shí)任務(wù)達(dá)到提醒周期,則可獲知與其相鄰的下個(gè)定時(shí)任務(wù)的提醒周期。
在上述模塊中已闡明每個(gè)定時(shí)任務(wù)組均有其對(duì)應(yīng)的有序任務(wù)集合,有序任務(wù)集合中存儲(chǔ)有對(duì)應(yīng)的定時(shí)任務(wù)所包含的所有的定時(shí)任務(wù),并且在有序任務(wù)集合中所有的定時(shí)任務(wù)是按照一定的存儲(chǔ)順序進(jìn)行存儲(chǔ)的。具體地,為了便于查詢和管理,有序任務(wù)集合中所有的定時(shí)任務(wù)可以按照定時(shí)任務(wù)提醒時(shí)間的先后順序進(jìn)行存儲(chǔ)。以zset數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)的有序任務(wù)集合為例,zset中的元素可以以鍵值對(duì)的方式進(jìn)行存儲(chǔ),則有序集合中的各個(gè)定時(shí)任務(wù)的名稱可以存儲(chǔ)為zset中的各個(gè)key,而各個(gè)定時(shí)任務(wù)的更新提醒時(shí)間信息可以記錄為各個(gè)key對(duì)應(yīng)的value。并且,又由于zset為一有序集合,其有序體現(xiàn)在其每個(gè)存儲(chǔ)元素都有表征其順序的權(quán)重值,而在本實(shí)施例中,定時(shí)任務(wù)應(yīng)按照定時(shí)任務(wù)提醒時(shí)間的先后順序進(jìn)行存儲(chǔ),所以zset中每個(gè)存儲(chǔ)元素的順序權(quán)重值可以按照其value中存儲(chǔ)的更新提醒時(shí)間信息來進(jìn)行設(shè)置,從而達(dá)到有序集合中定時(shí)任務(wù)的有序排列。
可選的,當(dāng)定時(shí)任務(wù)組含有至少一個(gè)子任務(wù)組時(shí),記錄模塊45進(jìn)一步適于:將定時(shí)任務(wù)的提醒時(shí)間信息記錄到與子任務(wù)組對(duì)應(yīng)的子任務(wù)集合中。
具體地,可根據(jù)定時(shí)任務(wù)的任務(wù)屬性信息將該定時(shí)任務(wù)的提醒時(shí)間信息記錄在相應(yīng)的子任務(wù)組對(duì)應(yīng)的子任務(wù)集合中。
提醒模塊46適于根據(jù)與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合,調(diào)用與定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器對(duì)所述定時(shí)任務(wù)組中包含的各個(gè)定時(shí)任務(wù)進(jìn)行定時(shí)提醒。
其中,在定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中,按照各個(gè)定時(shí)任務(wù)的具體提醒時(shí)間的先后順序記錄了各個(gè)定時(shí)任務(wù)的提醒時(shí)間信息,因此,通過查詢與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合,能夠快速高效地確定出該定時(shí)任務(wù)組所包含的定時(shí)任務(wù)的數(shù)量以及各個(gè)定時(shí)任務(wù)的具體提醒時(shí)間。
可選的,為了節(jié)約系統(tǒng)開銷,每個(gè)定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器的數(shù)量?jī)H為一個(gè),并且,每個(gè)定時(shí)任務(wù)組分別對(duì)應(yīng)于一個(gè)工作線程,則每個(gè)工作線程只對(duì)應(yīng)一個(gè)定時(shí)器,則通過工作線程可以多次調(diào)用其對(duì)應(yīng)的定時(shí)器,從而能夠?qū)Χ〞r(shí)任務(wù)組中包含的多個(gè)定時(shí)任務(wù)分別進(jìn)行定時(shí)提醒。例如,定時(shí)器可實(shí)時(shí)監(jiān)控有序任務(wù)集合中提醒時(shí)間最早的定時(shí)任務(wù),當(dāng)提醒時(shí)間最早的定時(shí)任務(wù)還未到提醒時(shí)間時(shí)說明其他的定時(shí)任務(wù)也未達(dá)到提醒時(shí)間;當(dāng)提醒時(shí)間最早的定時(shí)任務(wù)達(dá)到提醒時(shí)間時(shí),則對(duì)該定時(shí)任務(wù)進(jìn)行提醒,并判斷下一個(gè)提醒時(shí)間最早的定時(shí)任務(wù)。具體實(shí)現(xiàn)時(shí),可以根據(jù)定時(shí)任務(wù)組中包含的定時(shí)任務(wù)的數(shù)量,定義多個(gè)全局變量,每個(gè)全局變量分別對(duì)應(yīng)于一個(gè)定時(shí)任務(wù),通過在該定時(shí)任務(wù)組所對(duì)應(yīng)的定時(shí)器里累加變量的方式實(shí)現(xiàn)多次調(diào)用該定時(shí)器的目的。
其中,當(dāng)每個(gè)定時(shí)任務(wù)組分別對(duì)應(yīng)于一個(gè)工作線程時(shí),上述的提醒模塊可以通過一個(gè)或多個(gè)工作線程實(shí)現(xiàn),具體工作線程的數(shù)量與系統(tǒng)中包含的定時(shí)任務(wù)組的數(shù)量一致。
可選的,本裝置還包括更改確定模塊(圖中未示出)、更改模塊(圖中未示出)。
更改確定模塊適于根據(jù)接收到的任務(wù)更改指令中包含的任務(wù)屬性信息,確定與任務(wù)屬性信息對(duì)應(yīng)的子任務(wù)集合。
更改模塊適于根據(jù)任務(wù)更改指令的指令類型,對(duì)子任務(wù)集合進(jìn)行相應(yīng)類型的更改。
具體地,指令類型包括:刪除類型、新增類型和/或修改類型。當(dāng)接收到任務(wù)更改指令時(shí),根據(jù)任務(wù)更改指令中包含的任務(wù)屬性信息,如任務(wù)提交方信息、任務(wù)起始時(shí)間信息、以及任務(wù)類型信息等,可以快速地查找到相應(yīng)的子任務(wù)集合,從而根據(jù)任務(wù)更改指令對(duì)子任務(wù)集合進(jìn)行相應(yīng)類型的更改。
例如,定時(shí)任務(wù)組中按照信息提交方信息將其劃分為一系列的子任務(wù)集合,當(dāng)不再對(duì)某一信息提交方提交的定時(shí)任務(wù)進(jìn)行提醒服務(wù),則需要?jiǎng)h除定時(shí)任務(wù)組中所有由該信息提交方提交的定時(shí)任務(wù),則可通過接收到的任務(wù)更改指令中包含的該信息提交方的信息(如用戶標(biāo)識(shí)等),查找到對(duì)應(yīng)的子任務(wù)集合,從而快速地將該子任務(wù)集合進(jìn)行刪除。
又例如,定時(shí)任務(wù)組中按照任務(wù)起始時(shí)間信息將其劃分為一系列的子任務(wù)集合,如起始時(shí)間信息為1月的劃分為一個(gè)子任務(wù)集合t1,起始時(shí)間信息為2月的劃分為另一個(gè)子任務(wù)集合t2。若需對(duì)任務(wù)起始時(shí)間信息為1月12號(hào)至1月15號(hào)的定時(shí)任務(wù)的進(jìn)行修改,則可通過接收到的任務(wù)更改指令中包含的該起始時(shí)間信息,查找到對(duì)應(yīng)的子任務(wù)集合t1,從而快速地定位目標(biāo)定時(shí)任務(wù),并對(duì)目標(biāo)定時(shí)任務(wù)進(jìn)行相應(yīng)的修改。
由此可見,通過對(duì)相同提醒周期的定時(shí)任務(wù)進(jìn)行合并,并通過與定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中記錄的各個(gè)定時(shí)任務(wù)的提醒時(shí)間信息來確定定時(shí)任務(wù)組中每個(gè)定時(shí)任務(wù)的具體提醒時(shí)間以進(jìn)行提醒,從而降低了定時(shí)器的數(shù)量、減少了系統(tǒng)開銷,并避免了因系統(tǒng)開銷過大而導(dǎo)致的系統(tǒng)崩潰、延時(shí)過長(zhǎng)等一系列問題。另外,通過根據(jù)任務(wù)屬性信息將有序任務(wù)集合劃分為至少一個(gè)的子任務(wù)集合,加快了定時(shí)任務(wù)的查找速度,更加便于對(duì)各個(gè)定時(shí)任務(wù)的更改及管理。另外,由于有序任務(wù)集合中記錄的各個(gè)定時(shí)任務(wù)是按照提醒時(shí)間的先后排列的,若提醒時(shí)間靠前的定時(shí)任務(wù)尚未到達(dá)提醒時(shí)間,則無需監(jiān)控提醒時(shí)間靠后的定時(shí)任務(wù),因此,只需針對(duì)距離當(dāng)前時(shí)間最近的定時(shí)任務(wù)進(jìn)行監(jiān)控即可,大幅降低了監(jiān)控開銷。
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語(yǔ)言。應(yīng)當(dāng)明白,可以利用各種編程語(yǔ)言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語(yǔ)言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中。可以把實(shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(dsp)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的基于集群的數(shù)據(jù)存儲(chǔ)空間裝置模塊中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。
本發(fā)明公開了:a1.一種定時(shí)任務(wù)的提醒方法,包括:
確定接收到的定時(shí)任務(wù)的提醒周期,將所述定時(shí)任務(wù)合并到與所述提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中;
將所述定時(shí)任務(wù)的提醒時(shí)間信息記錄到與所述定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中;
根據(jù)與所述定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合,調(diào)用與所述定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器對(duì)所述定時(shí)任務(wù)組中包含的各個(gè)定時(shí)任務(wù)進(jìn)行定時(shí)提醒。
a2.根據(jù)a1所述的方法,其中,所述將所述定時(shí)任務(wù)合并到與所述提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中的步驟具體包括:
查詢是否存在與所述提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組;
若查詢結(jié)果為是,將所述定時(shí)任務(wù)添加到查詢到的定時(shí)任務(wù)組中;
若查詢結(jié)果為否,創(chuàng)建與所述提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,將所述定時(shí)任務(wù)添加到創(chuàng)建的定時(shí)任務(wù)組中,并創(chuàng)建與所述定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器及有序任務(wù)集合。
a3.根據(jù)a1或a2所述的方法,其中,當(dāng)接收到的定時(shí)任務(wù)包括多個(gè)時(shí),所述確定接收到的定時(shí)任務(wù)的提醒周期,將所述定時(shí)任務(wù)合并到與所述提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中的步驟具體包括:
分別確定每個(gè)定時(shí)任務(wù)的提醒周期;分別針對(duì)每個(gè)定時(shí)任務(wù),將該定時(shí)任務(wù)合并到與其提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中;
且所述將所述定時(shí)任務(wù)的提醒時(shí)間信息記錄到與所述定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中的步驟具體包括:分別確定每個(gè)定時(shí)任務(wù)所在的定時(shí)任務(wù)組,并將該定時(shí)任務(wù)的提醒時(shí)間信息記錄到該定時(shí)任務(wù)所在的定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中。
a4.根據(jù)a1-a3任一所述的方法,其中,所述接收到的定時(shí)任務(wù)包括:至少一個(gè)單任務(wù),和/或,至少一個(gè)任務(wù)類;其中,每個(gè)任務(wù)類包括多個(gè)提醒周期相同的單任務(wù)。
a5.根據(jù)a1-a4任一所述的方法,其中,所述定時(shí)任務(wù)組進(jìn)一步包括:根據(jù)任務(wù)屬性信息劃分的至少一個(gè)子任務(wù)組,且所述定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合進(jìn)一步包括:至少一個(gè)與所述子任務(wù)組一一對(duì)應(yīng)的子任務(wù)集合;
則所述將所述定時(shí)任務(wù)合并到與所述提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中的步驟進(jìn)一步包括:確定所述定時(shí)任務(wù)的任務(wù)屬性信息,根據(jù)所述任務(wù)屬性信息將所述定時(shí)任務(wù)合并到對(duì)應(yīng)的子任務(wù)組中;
且所述將所述定時(shí)任務(wù)的提醒時(shí)間信息記錄到與所述定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中的步驟進(jìn)一步包括:將所述定時(shí)任務(wù)的提醒時(shí)間信息記錄到與所述子任務(wù)組對(duì)應(yīng)的子任務(wù)集合中。
a6.根據(jù)a5所述的方法,其中,所述任務(wù)屬性信息包括以下中的至少一個(gè):任務(wù)提交方信息、任務(wù)起始時(shí)間信息、以及任務(wù)類型信息。
a7.根據(jù)a5或a6所述的方法,其中,所述將所述定時(shí)任務(wù)的提醒時(shí)間信息記錄到與所述定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中的步驟之后,進(jìn)一步包括:
根據(jù)接收到的任務(wù)更改指令中包含的任務(wù)屬性信息,確定與所述任務(wù)屬性信息對(duì)應(yīng)的子任務(wù)集合;
根據(jù)所述任務(wù)更改指令的指令類型,對(duì)所述子任務(wù)集合進(jìn)行相應(yīng)類型的更改;其中,所述指令類型包括:刪除類型、新增類型和/或修改類型。
a8.根據(jù)a1-a7任一所述的方法,其中,所述提醒時(shí)間信息包括:任務(wù)起始時(shí)間、和/或下次提醒時(shí)間。
a9.根據(jù)a1-a8任一所述的方法,其中,每個(gè)定時(shí)任務(wù)組中包含的各個(gè)定時(shí)任務(wù)的提醒周期相同,且每個(gè)定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器的數(shù)量為一個(gè);
并且,每個(gè)定時(shí)任務(wù)組分別對(duì)應(yīng)于一個(gè)工作線程,則所述根據(jù)與所述定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合,調(diào)用與所述定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器對(duì)所述定時(shí)任務(wù)組中包含的各個(gè)定時(shí)任務(wù)進(jìn)行定時(shí)提醒的步驟由對(duì)應(yīng)的工作線程執(zhí)行。
本發(fā)明還公開了:b10.一種定時(shí)任務(wù)的提醒裝置,包括:
確定模塊,適于確定接收到的定時(shí)任務(wù)的提醒周期;
合并模塊,適于將所述定時(shí)任務(wù)合并到與所述提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中;
記錄模塊,適于將所述定時(shí)任務(wù)的提醒時(shí)間信息記錄到與所述定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中;
提醒模塊,適于根據(jù)與所述定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合,調(diào)用與所述定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器對(duì)所述定時(shí)任務(wù)組中包含的各個(gè)定時(shí)任務(wù)進(jìn)行定時(shí)提醒。
b11.根據(jù)b10所述的裝置,其中,所述裝置還包括:
查詢模塊,適于查詢是否存在與所述提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組;
所述合并模塊具體適于,當(dāng)查詢模塊的查詢結(jié)果為是時(shí),將所述定時(shí)任務(wù)添加到查詢到的定時(shí)任務(wù)組中;
創(chuàng)建模塊,適于若查詢模塊的查詢結(jié)果為否時(shí),創(chuàng)建與所述提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組,將所述定時(shí)任務(wù)添加到創(chuàng)建的定時(shí)任務(wù)組中,并創(chuàng)建與所述定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器及有序任務(wù)集合。
b12.根據(jù)b10或b11所述的裝置,其中,當(dāng)接收到的定時(shí)任務(wù)包括多個(gè)時(shí),
所述合并模塊進(jìn)一步適于:分別確定每個(gè)定時(shí)任務(wù)的提醒周期;分別針對(duì)每個(gè)定時(shí)任務(wù),將該定時(shí)任務(wù)合并到與其提醒周期對(duì)應(yīng)的定時(shí)任務(wù)組中;
所述記錄模塊進(jìn)一步適于:分別確定每個(gè)定時(shí)任務(wù)所在的定時(shí)任務(wù)組,并將該定時(shí)任務(wù)的提醒時(shí)間信息記錄到該定時(shí)任務(wù)所在的定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合中。
b13.根據(jù)b10-b12任一所述的裝置,其中,所述接收到的定時(shí)任務(wù)包括:至少一個(gè)單任務(wù),和/或,至少一個(gè)任務(wù)類;其中,每個(gè)任務(wù)類包括多個(gè)提醒周期相同的單任務(wù)。
b14.根據(jù)b10-b13任一所述的裝置,其中,所述定時(shí)任務(wù)組進(jìn)一步包括:根據(jù)任務(wù)屬性信息劃分的至少一個(gè)子任務(wù)組,且所述定時(shí)任務(wù)組對(duì)應(yīng)的有序任務(wù)集合進(jìn)一步包括:至少一個(gè)與所述子任務(wù)組一一對(duì)應(yīng)的子任務(wù)集合;
所述合并模塊進(jìn)一步適于:確定所述定時(shí)任務(wù)的任務(wù)屬性信息,根據(jù)所述任務(wù)屬性信息將所述定時(shí)任務(wù)合并到對(duì)應(yīng)的子任務(wù)組中;
所述記錄模塊進(jìn)一步適于:將所述定時(shí)任務(wù)的提醒時(shí)間信息記錄到與所述子任務(wù)組對(duì)應(yīng)的子任務(wù)集合中。
b15.根據(jù)b14所述的裝置,其中,所述任務(wù)屬性信息包括以下中的至少一個(gè):任務(wù)提交方信息、任務(wù)起始時(shí)間信息、以及任務(wù)類型信息。
b16.根據(jù)b14或b15所述的裝置,其中,所述裝置還包括:
更改確定模塊,適于根據(jù)接收到的任務(wù)更改指令中包含的任務(wù)屬性信息,確定與所述任務(wù)屬性信息對(duì)應(yīng)的子任務(wù)集合;
更改模塊,適于根據(jù)所述任務(wù)更改指令的指令類型,對(duì)所述子任務(wù)集合進(jìn)行相應(yīng)類型的更改;其中,所述指令類型包括:刪除類型、新增類型和/或修改類型。
b17.根據(jù)b10-b16任一所述的裝置,其中,所述提醒時(shí)間信息包括:任務(wù)起始時(shí)間、和/或下次提醒時(shí)間。
b18.根據(jù)b10-b17任一所述的裝置,其中,每個(gè)定時(shí)任務(wù)組中包含的各個(gè)定時(shí)任務(wù)的提醒周期相同,且每個(gè)定時(shí)任務(wù)組對(duì)應(yīng)的定時(shí)器的數(shù)量為一個(gè);并且,每個(gè)定時(shí)任務(wù)組分別對(duì)應(yīng)于一個(gè)工作線程。