本發(fā)明涉及定時器技術(shù)領域,尤其涉及一種定時器的處理方法和裝置。
背景技術(shù):
分布式存儲系統(tǒng)需要處理大量的io以及其他策略任務,其中定時器是一個必不可少的組件。但使用場景的不同,對定時器的實現(xiàn)考慮也不盡相同。不同定時器的時間中,區(qū)別在于定時器的復雜度和時間精度。
復雜度在于任務隊列排序的實現(xiàn),如何排序和快速獲取當下第一個待開始的任務。精度在于任務開始時間的時間精度。不同實現(xiàn)主要在于不同復雜度的實現(xiàn),當前技術(shù)大部分使用堆棧、紅黑樹、時間輪、列表。
現(xiàn)有技術(shù)中,算法均比較復雜,處理的速度比較慢。
技術(shù)實現(xiàn)要素:
本發(fā)明的實施例提供了一種定時器的處理方法和裝置,能夠提供一種實現(xiàn)相對簡單、操作快速的定時器。
為了實現(xiàn)上述目的,本發(fā)明采取了如下技術(shù)方案。
一種定時器的處理方法,包括:
獲取系統(tǒng)中每個任務的預定發(fā)生時間;
將每個任務的預定發(fā)生時間對應一個第一節(jié)點;
按照所述每個第一節(jié)點對應的預定發(fā)生時間的順序,將所述第一節(jié)點組成至少兩層的跳表結(jié)構(gòu)的任務隊列。
一種定時器的處理裝置,包括:
第一獲取單元,獲取系統(tǒng)中每個任務的預定發(fā)生時間;
第一對應單元,將每個任務的預定發(fā)生時間對應一個第一節(jié)點;
組建單元,按照所述每個第一節(jié)點對應的預定發(fā)生時間的順序,將所述第一節(jié)點組成至少兩層的跳表結(jié)構(gòu)的任務隊列。
由上述本發(fā)明的實施例提供的技術(shù)方案可以看出,本發(fā)明實施例中,通過構(gòu)建跳表結(jié)構(gòu)的任務隊列,能夠提高系統(tǒng)的操作速度。
本發(fā)明附加的方面和優(yōu)點將在下面的描述中部分給出,這些將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到。
附圖說明
為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例一提供的一種定時器的處理方法的處理流程圖;
圖2為本發(fā)明實施例提供的跳表結(jié)構(gòu)的任務隊列的示意圖。
圖3為本發(fā)明實施例提供的任務隊列的處理方法的處理流程圖;
圖4為本發(fā)明實施例二提供的一種定時器的處理裝置的連接示意圖。
具體實施方式
下面詳細描述本發(fā)明的實施方式,所述實施方式的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施方式是示例性的,僅用于解釋本發(fā)明,而不能解釋為對本發(fā)明的限制。
如圖1所示,本發(fā)明提供一種定時器的處理方法,包括:
步驟11,獲取系統(tǒng)中每個任務的預定發(fā)生時間;
步驟12,將每個任務的預定發(fā)生時間對應一個第一節(jié)點;
步驟13,按照所述每個第一節(jié)點對應的預定發(fā)生時間的順序,將所述第一節(jié)點組成至少兩層的跳表結(jié)構(gòu)的任務隊列。如圖2所示,為本發(fā)明所述的跳表結(jié)構(gòu)的任務隊列的示意圖。
本發(fā)明組建任務隊列時,采用跳表結(jié)構(gòu);后續(xù)處理時,需要按時間順序查找新任務的插入位置,從而將新任務插入任務隊列。采用跳表結(jié)構(gòu)的查找方式,能夠加快查找的處理速度。
其中,步驟13包括:
步驟131,按照所述預訂發(fā)生時間的順序,將所述第一節(jié)點組成第一層鏈表。該步驟中,所述第一節(jié)點可以包括第一指針,所述第一指針指向所述第一層鏈表中的下一個節(jié)點的地址。
步驟132,從所述第一層鏈表的第一節(jié)點中提取部分節(jié)點,作為第二節(jié)點;
步驟133,按照所述第二節(jié)點對應的預訂發(fā)生時間的順序,將所述第二節(jié)點組成第二層鏈表。該步驟中,第二節(jié)點包括:第二指針和第三指針,所述第二指針用于指向所述第二層鏈表中的下一個節(jié)點的地址,所述第三指針用于指向與所述第二節(jié)點的預訂發(fā)生時間相同的所述第一節(jié)點的地址。
上述實施例中,可以設置多層鏈表,鏈表的層數(shù)可以根據(jù)任務節(jié)點的多少來進行設置。
可選的,所述方法還包括:
步驟14,獲取系統(tǒng)中新任務的預定發(fā)生時間;
步驟15,將所述新任務的預定發(fā)生時間對應一個第三節(jié)點;
步驟16,根據(jù)所述第三節(jié)點對應的新任務的預定發(fā)生時間,查找所述第三節(jié)點在所述任務隊列中的位置;
步驟17,按照查找到的所述位置,將所述第三節(jié)點插入到所述跳表結(jié)構(gòu)的任務隊列中。
步驟17具體包括:
步驟171,將所述第三節(jié)點的預定發(fā)生時間,與所述第二層鏈表中的第二節(jié)點對應的預定發(fā)生時間進行比較,獲取所述第三節(jié)點在第二層鏈表的最小區(qū)間;所述最小區(qū)間的兩個邊界由第二層鏈表中的兩個第四節(jié)點界定;
步驟172,獲取所述第二層鏈表的所述兩個第四節(jié)點對應的所述第一層鏈表中的兩個第五節(jié)點;
步驟173,在所述兩個第五節(jié)點組成的區(qū)間里,查找所述新任務對應的第三節(jié)點在所述第一層鏈表中的位置。
上述實施例中,在組建任務隊列時,采用跳表結(jié)構(gòu);后續(xù)處理時,需要按時間順序查找新任務的插入位置,從而將新任務插入任務隊列。采用跳表結(jié)構(gòu)的查找方式,能夠加快查找速度。
可選的,所述方法還包括:
步驟18,定期獲取當前時間;
步驟19,從所述任務隊列中獲取第一個任務的計劃執(zhí)行時間;
步驟110,根據(jù)所述第一個任務的計劃執(zhí)行時間和所述當前時間,判斷是否需要啟動所述第一個任務;步驟110具體為:判斷所述當前時間是否晚于或者等于所述第一個任務對應的預定發(fā)生時間,判斷是否需要啟動所述第一個任務;
步驟111,如果為是,則啟動所述第一個任務,并從所述任務隊列中刪除所述第一個任務對應的節(jié)點。
所述方法還包括:
步驟112,判斷所述第一個任務是否下次執(zhí)行;
步驟113,如果為是,則根據(jù)所述第一個任務的下次執(zhí)行時間,將所述第一個任務對應的節(jié)點插入所述跳表結(jié)構(gòu)的任務隊列。
如圖3所示,為本發(fā)明所示的任務隊列的處理示意圖。本發(fā)明可以用于分布式存儲系統(tǒng)。分布式存儲系統(tǒng)需要處理大量的io以及其他策略任務,其中定時器是一個必不可少的組件。對于定時器實現(xiàn),不同實現(xiàn)之間的差異在于時間精度和任務隊列的實現(xiàn)。本實施例中,可以采用納秒為精度,基于跳表實現(xiàn)一種實現(xiàn)相對簡單,操作快速的定時器。
基于跳表的定時器具體實現(xiàn)為:任何時間產(chǎn)生新任務,都及時插入任務隊列。
當定時器任務檢查循環(huán)開始,檢查判斷任務隊列中第一個任務是否需要開始執(zhí)行;如不需要,任務檢查循環(huán)進入等待,直到檢查的第一個任務的開始時間的時刻再做檢查判斷是否要執(zhí)行;如需要執(zhí)行,從任務隊列中刪除該任務,執(zhí)行該任務,并獲得下次執(zhí)行時間。然后判斷該任務是否需要再次執(zhí)行,如不需要下次執(zhí)行,那么循環(huán)回到檢查任務隊列的第二個任務是否需要執(zhí)行;如需要再次執(zhí)行,就將該任務id和下次執(zhí)行時間插入任務隊列。然后再次循環(huán)檢查任務隊列中第一個任務是否需要當前時間執(zhí)行。
本發(fā)明的任務隊列的實現(xiàn)是基于跳表的,基于跳表的特性,實現(xiàn)簡單,操作快速,使得基于跳表的定時器實現(xiàn)簡單,操作快速。
如圖4所示,為本發(fā)明所述的一種定時器的處理裝置,包括:
第一獲取單元21,獲取系統(tǒng)中每個任務的預定發(fā)生時間;
第一對應單元22,將每個任務的預定發(fā)生時間對應一個第一節(jié)點;
組建單元23,按照所述每個第一節(jié)點對應的預定發(fā)生時間的順序,將所述第一節(jié)點組成至少兩層的跳表結(jié)構(gòu)的任務隊列。
所述組建單元包括:
第一組建子單元231,按照所述預訂發(fā)生時間的順序,將所述第一節(jié)點組成第一層鏈表;
提取子單元232,從所述第一層鏈表的第一節(jié)點中提取部分節(jié)點,作為第二節(jié)點;
第二組建子單元233,按照所述第二節(jié)點對應的預訂發(fā)生時間的順序,將所述第二節(jié)點組成第二層鏈表。
可選的,所述裝置還包括:
第二獲取單元24,獲取系統(tǒng)中新任務的預定發(fā)生時間;
第二對應單元25,將所述新任務的預定發(fā)生時間對應一個第三節(jié)點;
查找單元26,根據(jù)所述第三節(jié)點對應的新任務的預定發(fā)生時間,查找所述第三節(jié)點在所述任務隊列中的位置;
插入單元27,按照查找到的所述位置,將所述第三節(jié)點插入到所述跳表結(jié)構(gòu)的任務隊列中。
本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于裝置或系統(tǒng)實施例而言,由于其基本相似于方法實施例,所以描述得比較簡單,相關之處參見方法實施例的部分說明即可。以上所描述的裝置及系統(tǒng)實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
以上所述,僅為本發(fā)明較佳的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應該以權(quán)利要求的保護范圍為準。