軟件設(shè)計(jì)中基于海量定時(shí)器的管理方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種軟件設(shè)計(jì)中基于海量定時(shí)器的管理方法及系統(tǒng),涉及網(wǎng)絡(luò)通信領(lǐng)域,該系統(tǒng)采用時(shí)間輪子加有序鏈表的方式對海量定時(shí)器進(jìn)行管理:管理未到時(shí)定時(shí)器時(shí),根據(jù)離散算法將定時(shí)器的溢出時(shí)間轉(zhuǎn)化為適合時(shí)間輪子的數(shù)值,找到時(shí)間輪子上的定時(shí)器有序鏈表,再將該定時(shí)器插入到這個有序鏈表的合適位置中;調(diào)度到時(shí)定時(shí)器時(shí),根據(jù)離散算法將當(dāng)前系統(tǒng)時(shí)間轉(zhuǎn)換為適合時(shí)間輪子的數(shù)值,找到時(shí)間輪子上面的定時(shí)器有序鏈表,再執(zhí)行該有序鏈表上的所有到期定時(shí)器。本發(fā)明能實(shí)現(xiàn)軟件設(shè)計(jì)中海量定時(shí)器的快速管理,避免由定時(shí)調(diào)度慢導(dǎo)致的各種錯誤;到達(dá)49天時(shí),能根據(jù)32位數(shù)據(jù)類型的最高位來控制是否發(fā)生翻轉(zhuǎn)并重置,使定時(shí)器得到及時(shí)調(diào)度。
【專利說明】軟件設(shè)計(jì)中基于海量定時(shí)器的管理方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)通信領(lǐng)域,具體是涉及一種軟件設(shè)計(jì)中基于海量定時(shí)器的管理方法及系統(tǒng)。
【背景技術(shù)】
[0002]在軟件功能越來越復(fù)雜的條件下,軟件定時(shí)器廣泛應(yīng)用于軟件設(shè)計(jì)中,一般條件下定時(shí)器設(shè)計(jì)成有序鏈表,在有新的定時(shí)器到來時(shí),將這個定時(shí)器插入到鏈表的合適位置,在插入定時(shí)器的時(shí)候,遍歷這個有序鏈表會耗費(fèi)很多時(shí)間,影響性能,尤其在大量使用定時(shí)器、且頻繁使用時(shí),管理這些定時(shí)器將耗費(fèi)大量時(shí)間,導(dǎo)致心跳報(bào)文發(fā)送不及時(shí)、鏈路斷鏈等由定時(shí)調(diào)度慢導(dǎo)致的各種錯誤。當(dāng)計(jì)時(shí)精度為毫秒級別時(shí),軟件編譯器僅僅支持32位數(shù)據(jù)類型,利用32位數(shù)據(jù)類型作為計(jì)時(shí)變量,到達(dá)49天時(shí),該變量計(jì)滿溢出,定時(shí)器的數(shù)值翻轉(zhuǎn),使得計(jì)數(shù)變小,導(dǎo)致該定時(shí)器得不到調(diào)度。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是為了克服上述【背景技術(shù)】的不足,提供一種軟件設(shè)計(jì)中基于海量定時(shí)器的管理方法及系統(tǒng),能夠?qū)崿F(xiàn)軟件設(shè)計(jì)中海量定時(shí)器的快速管理,避免心跳報(bào)文發(fā)送不及時(shí)、路由的鄰居關(guān)系斷鏈等由定時(shí)調(diào)度慢導(dǎo)致的各種錯誤;到達(dá)49天時(shí),能夠根據(jù)32位數(shù)據(jù)類型的最高位來控制是否發(fā)生翻轉(zhuǎn)并重置,使定時(shí)器得到及時(shí)調(diào)度。
[0004]本發(fā)明提供一種軟件設(shè)計(jì)中基于海量定時(shí)器的管理方法,包括以下步驟:
[0005]A、定義一個時(shí)間輪子,自行選定一種離散算法,將時(shí)間點(diǎn)或時(shí)間片均勻分配在該時(shí)間輪子上,屬于某個時(shí)間點(diǎn)或時(shí)間片的定時(shí)器使用有序鏈表方式掛在該時(shí)間輪子下;所述時(shí)間輪子和有序鏈表的關(guān)系以及時(shí)間輪子的運(yùn)作方式如下:根據(jù)現(xiàn)有的離散算法或者是直接對時(shí)間進(jìn)行取模運(yùn)算,在時(shí)間輪子上離散各個時(shí)間點(diǎn),在得到的離散時(shí)間點(diǎn)處掛一個有序鏈表,用于存儲位于該時(shí)間點(diǎn)上的定時(shí)器,將海量的定時(shí)器通過一個有序鏈表離散開來,便于調(diào)度定時(shí)器;
[0006]B、定時(shí)器的計(jì)時(shí)單位為毫秒,定時(shí)器的溢出時(shí)間使用無符號32位數(shù)據(jù)類型,系統(tǒng)時(shí)間使用有符號的32位數(shù)據(jù)類型;插入定時(shí)器和調(diào)度定時(shí)器是在同一進(jìn)程中同時(shí)進(jìn)行對同一時(shí)間輪子同時(shí)進(jìn)行的操作,在插入定時(shí)器或調(diào)度定時(shí)器的時(shí)候,給時(shí)間輪子上鎖,以保證數(shù)據(jù)的可靠;
[0007]插入定時(shí)器的實(shí)現(xiàn)流程如下:
[0008]步驟101、根據(jù)時(shí)間輪子和有序鏈表的關(guān)系,分配定時(shí)器使用的時(shí)間輪子的大小,并初始化定時(shí)器使用的時(shí)間輪子;
[0009]步驟102、進(jìn)入插入定時(shí)器的流程,根據(jù)定時(shí)器的溢出時(shí)間計(jì)算出時(shí)間輪子上的位置;
[0010]步驟103、根據(jù)定時(shí)器的溢出時(shí)間找到位于時(shí)間輪子上的鏈表位置,并將定時(shí)器插入到該位置下掛有序鏈表的合適位置;
[0011]調(diào)度定時(shí)器的實(shí)現(xiàn)流程如下:
[0012]步驟201、根據(jù)時(shí)間輪子和有序鏈表的關(guān)系,分配定時(shí)器使用的時(shí)間輪子的大小,并初始化定時(shí)器使用的時(shí)間輪子;
[0013]步驟202、進(jìn)入調(diào)度定時(shí)器的流程;
[0014]步驟203、讀取系統(tǒng)的當(dāng)前時(shí)間,根據(jù)離散算法將系統(tǒng)的當(dāng)前時(shí)間轉(zhuǎn)換為系統(tǒng)時(shí)間的滴答;
[0015]在第25天的時(shí)候,即當(dāng)定時(shí)器的溢出時(shí)間的符號位為I時(shí),將未調(diào)度的所有定時(shí)器的溢出時(shí)間進(jìn)行以下轉(zhuǎn)換:根據(jù)定時(shí)器的溢出時(shí)間的高位來判斷是否發(fā)生翻轉(zhuǎn),如果定時(shí)器的溢出時(shí)間的高位為1,則將定時(shí)器的溢出時(shí)間的高位置為0,即將定時(shí)器的溢出時(shí)間與數(shù)據(jù)0x7fffffff做位與運(yùn)算;如果定時(shí)器的溢出時(shí)間的高位為0,則將定時(shí)器的溢出時(shí)間賦值為0,保證該定時(shí)器被及時(shí)調(diào)度;
[0016]步驟204、讀取時(shí)間輪子上記錄的滴答,比較系統(tǒng)時(shí)間的滴答與時(shí)間輪子上記錄的滴答是否相等,如果不相等,則轉(zhuǎn)到步驟205 ;如果相等,則返回到步驟201 ;
[0017]步驟205、順序執(zhí)行位于該時(shí)間輪子上面的有序鏈表的溢出定時(shí)器的處理流程,轉(zhuǎn)到步驟206 ;
[0018]步驟206、將執(zhí)行過的定時(shí)器從有序鏈表刪除,轉(zhuǎn)到步驟207 ;
[0019]步驟207、執(zhí)行后將時(shí)間輪子記錄的滴答遞增,返回到步驟204。
[0020]本發(fā)明還提供一種軟件設(shè)計(jì)中基于海量定時(shí)器的管理系統(tǒng),該系統(tǒng)通過軟件實(shí)現(xiàn),采用時(shí)間輪子加有序鏈表的方式對海量定時(shí)器進(jìn)行管理,該系統(tǒng)包括時(shí)間輪子定義單元、時(shí)間輪子上鎖單元、定時(shí)器插入單元、定時(shí)器調(diào)度單元,其中:
[0021]所述時(shí)間輪子定義單元用于:定義一個時(shí)間輪子,自行選定一種離散算法,將時(shí)間點(diǎn)或時(shí)間片均勻分配在該時(shí)間輪子上,屬于某個時(shí)間點(diǎn)或時(shí)間片的定時(shí)器使用有序鏈表方式掛在該時(shí)間輪子下;所述時(shí)間輪子和有序鏈表的關(guān)系以及時(shí)間輪子的運(yùn)作方式如下:根據(jù)現(xiàn)有的離散算法或者是直接對時(shí)間進(jìn)行取模運(yùn)算,在時(shí)間輪子上離散各個時(shí)間點(diǎn),在得到的離散時(shí)間點(diǎn)處掛一個有序鏈表,用于存儲位于該時(shí)間點(diǎn)上的定時(shí)器,將海量的定時(shí)器通過一個有序鏈表離散開來,便于調(diào)度定時(shí)器;定時(shí)器的計(jì)時(shí)單位為毫秒,定時(shí)器的溢出時(shí)間使用無符號32位數(shù)據(jù)類型,系統(tǒng)時(shí)間使用有符號的32位數(shù)據(jù)類型;
[0022]所述時(shí)間輪子上鎖單元用于:插入定時(shí)器和調(diào)度定時(shí)器是在同一進(jìn)程中同時(shí)進(jìn)行對同一時(shí)間輪子同時(shí)進(jìn)行的操作,在插入定時(shí)器或調(diào)度定時(shí)器的時(shí)候,給時(shí)間輪子上鎖,以保證數(shù)據(jù)的可靠;
[0023]所述定時(shí)器插入單元用于:根據(jù)時(shí)間輪子和有序鏈表的關(guān)系,分配定時(shí)器使用的時(shí)間輪子的大小,并初始化定時(shí)器使用的時(shí)間輪子;進(jìn)入插入定時(shí)器的流程,根據(jù)定時(shí)器的溢出時(shí)間計(jì)算出時(shí)間輪子上的位置;根據(jù)定時(shí)器的溢出時(shí)間找到位于時(shí)間輪子上的鏈表位置,并將定時(shí)器插入到該位置下掛有序鏈表的合適位置;
[0024]所述定時(shí)器調(diào)度單元用于執(zhí)行以下流程:
[0025]步驟201、根據(jù)時(shí)間輪子和有序鏈表的關(guān)系,分配定時(shí)器使用的時(shí)間輪子的大小,并初始化定時(shí)器使用的時(shí)間輪子;
[0026]步驟202、進(jìn)入調(diào)度定時(shí)器的流程;
[0027]步驟203、讀取系統(tǒng)的當(dāng)前時(shí)間,根據(jù)離散算法將系統(tǒng)的當(dāng)前時(shí)間轉(zhuǎn)換為系統(tǒng)時(shí)間的滴答;
[0028]在第25天的時(shí)候,即當(dāng)定時(shí)器的溢出時(shí)間的符號位為I時(shí),將未調(diào)度的所有定時(shí)器的溢出時(shí)間進(jìn)行以下轉(zhuǎn)換:根據(jù)定時(shí)器的溢出時(shí)間的高位來判斷是否發(fā)生翻轉(zhuǎn),如果定時(shí)器的溢出時(shí)間的高位為1,則將定時(shí)器的溢出時(shí)間的高位置為0,即將定時(shí)器的溢出時(shí)間與數(shù)據(jù)0x7fffffff做位與運(yùn)算;如果定時(shí)器的溢出時(shí)間的高位為0,則將定時(shí)器的溢出時(shí)間賦值為0,保證該定時(shí)器被及時(shí)調(diào)度;
[0029]步驟204、讀取時(shí)間輪子上記錄的滴答,比較系統(tǒng)時(shí)間的滴答與時(shí)間輪子上記錄的滴答是否相等,如果不相等,則轉(zhuǎn)到步驟205 ;如果相等,則返回到步驟201 ;
[0030]步驟205、順序執(zhí)行位于該時(shí)間輪子上面的有序鏈表的溢出定時(shí)器的處理流程,轉(zhuǎn)到步驟206 ;
[0031]步驟206、將執(zhí)行過的定時(shí)器從有序鏈表刪除,轉(zhuǎn)到步驟207 ;
[0032]步驟207、執(zhí)行后將時(shí)間輪子記錄的滴答遞增,返回到步驟204。
[0033]與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)如下:
[0034](I)本發(fā)明采用時(shí)間輪子加有序鏈表的方式對海量定時(shí)器進(jìn)行管理,能夠?qū)崿F(xiàn)軟件設(shè)計(jì)中海量定時(shí)器的快速管理,避免心跳報(bào)文發(fā)送不及時(shí)、路由的鄰居關(guān)系斷鏈等由定時(shí)調(diào)度慢導(dǎo)致的各種錯誤。
[0035](2)本發(fā)明利用32位數(shù)據(jù)類型作為計(jì)時(shí)變量,并且計(jì)時(shí)精度為毫秒,到達(dá)49天時(shí),能夠根據(jù)32位數(shù)據(jù)類型的最高位來控制是否發(fā)生翻轉(zhuǎn)并重置,使定時(shí)器得到及時(shí)調(diào)度。
【專利附圖】
【附圖說明】
[0036]圖1是本發(fā)明實(shí)施例中時(shí)間輪子和有序鏈表的關(guān)系不意圖。
[0037]圖2是本發(fā)明實(shí)施例中基于海量定時(shí)器的管理方法的流程圖。
圖3是本發(fā)明實(shí)施例中基于調(diào)度定時(shí)器的管理方法的流程圖。
【具體實(shí)施方式】
[0038]下面結(jié)合附圖及具體實(shí)施例對本發(fā)明作進(jìn)一步的詳細(xì)描述。
[0039]本發(fā)明實(shí)施例提供一種軟件設(shè)計(jì)中基于海量定時(shí)器的管理方法,包括以下步驟:
[0040]A、參見圖1所示,首先根據(jù)需要定義一個適合大小的時(shí)間輪子,自行選定一種離散算法(下文中統(tǒng)一使用該離散算法),將時(shí)間點(diǎn)或時(shí)間片均勻分配在該時(shí)間輪子上,屬于某個時(shí)間點(diǎn)或時(shí)間片的定時(shí)器使用有序鏈表方式掛在該時(shí)間輪子下。
[0041]時(shí)間輪子和有序鏈表的關(guān)系以及時(shí)間輪子的運(yùn)作方式如下:可以根據(jù)現(xiàn)有的離散算法或者是直接對時(shí)間進(jìn)行取模運(yùn)算,在時(shí)間輪子上離散各個時(shí)間點(diǎn),在得到的離散時(shí)間點(diǎn)處掛一個有序鏈表,用于存儲位于該時(shí)間點(diǎn)上的定時(shí)器,這樣就將海量的定時(shí)器通過一個有序鏈表離散開來,便于調(diào)度定時(shí)器,提高效率。
[0042]B、定時(shí)器的計(jì)時(shí)單位為毫秒,定時(shí)器的溢出時(shí)間使用無符號32位數(shù)據(jù)類型,系統(tǒng)時(shí)間使用有符號的32位數(shù)據(jù)類型,所以系統(tǒng)時(shí)間只能記錄到24天,而定時(shí)器的溢出時(shí)間可以記錄到49天。
[0043]插入定時(shí)器和調(diào)度定時(shí)器是在同一進(jìn)程中對同一時(shí)間輪子同時(shí)進(jìn)行的操作,在插入定時(shí)器的同時(shí)也可以調(diào)度定時(shí)器,相反在調(diào)度定時(shí)器的同時(shí)也可以插入定時(shí)器,所以,在插入定時(shí)器或調(diào)度定時(shí)器的時(shí)候,需要給時(shí)間輪子上鎖,以保證數(shù)據(jù)的可靠。
[0044]參見圖2所示,插入定時(shí)器的實(shí)現(xiàn)流程如下:
[0045]步驟101、根據(jù)時(shí)間輪子和有序鏈表的關(guān)系,分配定時(shí)器使用的時(shí)間輪子的大小,并初始化定時(shí)器使用的時(shí)間輪子;
[0046]步驟102、進(jìn)入插入定時(shí)器的流程,根據(jù)定時(shí)器的溢出時(shí)間計(jì)算出時(shí)間輪子上的位置;
[0047]步驟103、根據(jù)定時(shí)器的溢出時(shí)間找到位于時(shí)間輪子上的鏈表位置,并將定時(shí)器插入到該位置下掛有序鏈表的合適位置。
[0048]參見圖3所示,調(diào)度定時(shí)器的實(shí)現(xiàn)流程如下:
[0049]步驟201、根據(jù)時(shí)間輪子和有序鏈表的關(guān)系,分配定時(shí)器使用的時(shí)間輪子的大小,并初始化定時(shí)器使用的時(shí)間輪子;
[0050]步驟202、進(jìn)入調(diào)度定時(shí)器的流程;
[0051]步驟203、讀取系統(tǒng)的當(dāng)前時(shí)間,根據(jù)離散算法將系統(tǒng)的當(dāng)前時(shí)間轉(zhuǎn)換為系統(tǒng)時(shí)間的滴答;為了保證定時(shí)器到期可以正常調(diào)度,在第25天的時(shí)候,即當(dāng)定時(shí)器的溢出時(shí)間的符號位為I時(shí),將未調(diào)度的所有定時(shí)器的溢出時(shí)間進(jìn)行以下轉(zhuǎn)換:根據(jù)定時(shí)器的溢出時(shí)間的高位來判斷是否發(fā)生翻轉(zhuǎn),如果定時(shí)器的溢出時(shí)間的高位為1,則將定時(shí)器的溢出時(shí)間的高位置為0,即將定時(shí)器的溢出時(shí)間與數(shù)據(jù)0x7fffffff做位與運(yùn)算;如果定時(shí)器的溢出時(shí)間的高位為0,則將定時(shí)器的溢出時(shí)間賦值為0,保證該定時(shí)器可以被及時(shí)調(diào)度。由于定時(shí)器的溢出時(shí)間總會比系統(tǒng)當(dāng)前時(shí)間要大,這樣做能夠防止溢出時(shí)間溢出、但系統(tǒng)時(shí)間沒有溢出而導(dǎo)致定時(shí)器提前執(zhí)行的特殊情況;
[0052]步驟204、讀取時(shí)間輪子上記錄的滴答,比較系統(tǒng)時(shí)間的滴答與時(shí)間輪子上記錄的滴答是否相等,如果不相等,則轉(zhuǎn)到步驟205 ;如果相等,則返回到步驟201 ;
[0053]步驟205、順序執(zhí)行位于該時(shí)間輪子上面的有序鏈表的溢出定時(shí)器的處理流程,轉(zhuǎn)到步驟206 ;
[0054]步驟206、將執(zhí)行過的定時(shí)器從有序鏈表刪除,轉(zhuǎn)到步驟207 ;
[0055]步驟207、執(zhí)行后將時(shí)間輪子記錄的滴答遞增,返回到步驟204。
[0056]本發(fā)明實(shí)施例還提供一種軟件設(shè)計(jì)中基于海量定時(shí)器的管理系統(tǒng),該系統(tǒng)通過軟件實(shí)現(xiàn),采用時(shí)間輪子加有序鏈表的方式對海量定時(shí)器進(jìn)行管理,該系統(tǒng)包括時(shí)間輪子定義單元、時(shí)間輪子上鎖單元、定時(shí)器插入單元、定時(shí)器調(diào)度單元。
[0057]時(shí)間輪子定義單元用于:定義一個時(shí)間輪子,自行選定一種離散算法,將時(shí)間點(diǎn)或時(shí)間片均勻分配在該時(shí)間輪子上,屬于某個時(shí)間點(diǎn)或時(shí)間片的定時(shí)器使用有序鏈表方式掛在該時(shí)間輪子下;所述時(shí)間輪子和有序鏈表的關(guān)系以及時(shí)間輪子的運(yùn)作方式如下:根據(jù)現(xiàn)有的離散算法或者是直接對時(shí)間進(jìn)行取模運(yùn)算,在時(shí)間輪子上離散各個時(shí)間點(diǎn),在得到的離散時(shí)間點(diǎn)處掛一個有序鏈表,用于存儲位于該時(shí)間點(diǎn)上的定時(shí)器,將海量的定時(shí)器通過一個有序鏈表離散開來,便于調(diào)度定時(shí)器;定時(shí)器的計(jì)時(shí)單位為毫秒,定時(shí)器的溢出時(shí)間使用無符號32位數(shù)據(jù)類型,系統(tǒng)時(shí)間使用有符號的32位數(shù)據(jù)類型。
[0058]時(shí)間輪子上鎖單元用于:插入定時(shí)器和調(diào)度定時(shí)器是在同一進(jìn)程中同時(shí)進(jìn)行對同一時(shí)間輪子同時(shí)進(jìn)行的操作,在插入定時(shí)器或調(diào)度定時(shí)器的時(shí)候,給時(shí)間輪子上鎖,以保證數(shù)據(jù)的可靠。
[0059]定時(shí)器插入單元用于:根據(jù)時(shí)間輪子和有序鏈表的關(guān)系,分配定時(shí)器使用的時(shí)間輪子的大小,并初始化定時(shí)器使用的時(shí)間輪子;進(jìn)入插入定時(shí)器的流程,根據(jù)定時(shí)器的溢出時(shí)間計(jì)算出時(shí)間輪子上的位置;根據(jù)定時(shí)器的溢出時(shí)間找到位于時(shí)間輪子上的鏈表位置,并將定時(shí)器插入到該位置下掛有序鏈表的合適位置。
[0060]定時(shí)器調(diào)度單元用于執(zhí)行以下流程:
[0061]步驟201、根據(jù)時(shí)間輪子和有序鏈表的關(guān)系,分配定時(shí)器使用的時(shí)間輪子的大小,并初始化定時(shí)器使用的時(shí)間輪子;
[0062]步驟202、進(jìn)入調(diào)度定時(shí)器的流程;
[0063]步驟203、讀取系統(tǒng)的當(dāng)前時(shí)間,根據(jù)離散算法將系統(tǒng)的當(dāng)前時(shí)間轉(zhuǎn)換為系統(tǒng)時(shí)間的滴答;
[0064]在第25天的時(shí)候,即當(dāng)定時(shí)器的溢出時(shí)間的符號位為I時(shí),將未調(diào)度的所有定時(shí)器的溢出時(shí)間進(jìn)行以下轉(zhuǎn)換:根據(jù)定時(shí)器的溢出時(shí)間的高位來判斷是否發(fā)生翻轉(zhuǎn),如果定時(shí)器的溢出時(shí)間的高位為1,則將定時(shí)器的溢出時(shí)間的高位置為0,即將定時(shí)器的溢出時(shí)間與數(shù)據(jù)0x7fffffff做位與運(yùn)算;如果定時(shí)器的溢出時(shí)間的高位為0,則將定時(shí)器的溢出時(shí)間賦值為0,保證該定時(shí)器被及時(shí)調(diào)度;
[0065]步驟204、讀取時(shí)間輪子上記錄的滴答,比較系統(tǒng)時(shí)間的滴答與時(shí)間輪子上記錄的滴答是否相等,如果不相等,則轉(zhuǎn)到步驟205 ;如果相等,則返回到步驟201 ;
[0066]步驟205、順序執(zhí)行位于該時(shí)間輪子上面的有序鏈表的溢出定時(shí)器的處理流程,轉(zhuǎn)到步驟206 ;
[0067]步驟206、將執(zhí)行過的定時(shí)器從有序鏈表刪除,轉(zhuǎn)到步驟207 ;
[0068]步驟207、執(zhí)行后將時(shí)間輪子記錄的滴答遞增,返回到步驟204。
[0069]本發(fā)明的原理詳細(xì)闡述如下:
[0070]本發(fā)明中基于海量定時(shí)器的管理系統(tǒng)通過軟件實(shí)現(xiàn),采用時(shí)間輪子加有序鏈表的方式對海量定時(shí)器進(jìn)行管理。定時(shí)器的管理包括同時(shí)進(jìn)行的兩個部分,一是對未到時(shí)定時(shí)器的管理,一是對到期定時(shí)器的調(diào)度。管理未到時(shí)定時(shí)器時(shí),根據(jù)離散算法,將定時(shí)器的溢出時(shí)間轉(zhuǎn)化為適合時(shí)間輪子的數(shù)值即系統(tǒng)時(shí)間的滴答,根據(jù)該系統(tǒng)時(shí)間的滴答找到時(shí)間輪子上的定時(shí)器有序鏈表,再根據(jù)定時(shí)器的溢出時(shí)間將該定時(shí)器插入到這個有序鏈表的合適位置中。調(diào)度到時(shí)定時(shí)器時(shí),根據(jù)離散算法將當(dāng)前系統(tǒng)時(shí)間轉(zhuǎn)換為適合時(shí)間輪子的數(shù)值即系統(tǒng)時(shí)間的滴答,根據(jù)該系統(tǒng)時(shí)間的滴答找到時(shí)間輪子上面的定時(shí)器有序鏈表,再執(zhí)行該有序鏈表上的所有到期定時(shí)器的處理流程。
[0071 ] 本領(lǐng)域的技術(shù)人員可以對本發(fā)明實(shí)施例進(jìn)行各種修改和變型,倘若這些修改和變型在本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則這些修改和變型也在本發(fā)明的保護(hù)范圍之內(nèi)。
[0072]說明書中未詳細(xì)描述的內(nèi)容為本領(lǐng)域技術(shù)人員公知的現(xiàn)有技術(shù)。
【權(quán)利要求】
1.一種軟件設(shè)計(jì)中基于海量定時(shí)器的管理方法,其特征在于,包括以下步驟: A、定義一個時(shí)間輪子,自行選定一種離散算法,將時(shí)間點(diǎn)或時(shí)間片均勻分配在該時(shí)間輪子上,屬于某個時(shí)間點(diǎn)或時(shí)間片的定時(shí)器使用有序鏈表方式掛在該時(shí)間輪子下;所述時(shí)間輪子和有序鏈表的關(guān)系以及時(shí)間輪子的運(yùn)作方式如下:根據(jù)現(xiàn)有的離散算法或者是直接對時(shí)間進(jìn)行取模運(yùn)算,在時(shí)間輪子上離散各個時(shí)間點(diǎn),在得到的離散時(shí)間點(diǎn)處掛一個有序鏈表,用于存儲位于該時(shí)間點(diǎn)上的定時(shí)器,將海量的定時(shí)器通過一個有序鏈表離散開來,便于調(diào)度定時(shí)器; B、定時(shí)器的計(jì)時(shí)單位為毫秒,定時(shí)器的溢出時(shí)間使用無符號32位數(shù)據(jù)類型,系統(tǒng)時(shí)間使用有符號的32位數(shù)據(jù)類型;插入定時(shí)器和調(diào)度定時(shí)器是在同一進(jìn)程中同時(shí)進(jìn)行對同一時(shí)間輪子同時(shí)進(jìn)行的操作,在插入定時(shí)器或調(diào)度定時(shí)器的時(shí)候,給時(shí)間輪子上鎖,以保證數(shù)據(jù)的可靠; 插入定時(shí)器的實(shí)現(xiàn)流程如下: 步驟101、根據(jù)時(shí)間輪子和有序鏈表的關(guān)系,分配定時(shí)器使用的時(shí)間輪子的大小,并初始化定時(shí)器使用的時(shí)間輪子; 步驟102、進(jìn)入插入定時(shí)器的流程,根據(jù)定時(shí)器的溢出時(shí)間計(jì)算出時(shí)間輪子上的位置;步驟103、根據(jù)定時(shí)器的溢出時(shí)間找到位于時(shí)間輪子上的鏈表位置,并將定時(shí)器插入到該位置下掛有序鏈表的合適位置; 調(diào)度定時(shí)器的實(shí)現(xiàn)流程如下: 步驟201、根據(jù)時(shí)間輪子和有序鏈表的關(guān)系,分配定時(shí)器使用的時(shí)間輪子的大小,并初始化定時(shí)器使用的時(shí)間輪子; 步驟202、進(jìn)入調(diào)度定時(shí)器的流程; 步驟203、讀取系統(tǒng)的當(dāng)前時(shí)間,根據(jù)離散算法將系統(tǒng)的當(dāng)前時(shí)間轉(zhuǎn)換為系統(tǒng)時(shí)間的滴答; 在第25天的時(shí)候,即當(dāng)定時(shí)器的溢出時(shí)間的符號位為I時(shí),將未調(diào)度的所有定時(shí)器的溢出時(shí)間進(jìn)行以下轉(zhuǎn)換:根據(jù)定時(shí)器的溢出時(shí)間的高位來判斷是否發(fā)生翻轉(zhuǎn),如果定時(shí)器的溢出時(shí)間的高位為1,則將定時(shí)器的溢出時(shí)間的高位置為0,即將定時(shí)器的溢出時(shí)間與數(shù)據(jù)0x7fffffff做位與運(yùn)算;如果定時(shí)器的溢出時(shí)間的高位為0,則將定時(shí)器的溢出時(shí)間賦值為0,保證該定時(shí)器被及時(shí)調(diào)度; 步驟204、讀取時(shí)間輪子上記錄的滴答,比較系統(tǒng)時(shí)間的滴答與時(shí)間輪子上記錄的滴答是否相等,如果不相等,則轉(zhuǎn)到步驟205 ;如果相等,則返回到步驟201 ; 步驟205、順序執(zhí)行位于該時(shí)間輪子上面的有序鏈表的溢出定時(shí)器的處理流程,轉(zhuǎn)到步驟 206 ; 步驟206、將執(zhí)行過的定時(shí)器從有序鏈表刪除,轉(zhuǎn)到步驟207 ; 步驟207、執(zhí)行后將時(shí)間輪子記錄的滴答遞增,返回到步驟204。
2.一種軟件設(shè)計(jì)中基于海量定時(shí)器的管理系統(tǒng),其特征在于:該系統(tǒng)通過軟件實(shí)現(xiàn),采用時(shí)間輪子加有序鏈表的方式對海量定時(shí)器進(jìn)行管理,該系統(tǒng)包括時(shí)間輪子定義單元、時(shí)間輪子上鎖單元、定時(shí)器插入單元、定時(shí)器調(diào)度單元,其中: 所述時(shí)間輪子定義單元用于:定義一個時(shí)間輪子,自行選定一種離散算法,將時(shí)間點(diǎn)或時(shí)間片均勻分配在該時(shí)間輪子上,屬于某個時(shí)間點(diǎn)或時(shí)間片的定時(shí)器使用有序鏈表方式掛在該時(shí)間輪子下;所述時(shí)間輪子和有序鏈表的關(guān)系以及時(shí)間輪子的運(yùn)作方式如下:根據(jù)現(xiàn)有的離散算法或者是直接對時(shí)間進(jìn)行取模運(yùn)算,在時(shí)間輪子上離散各個時(shí)間點(diǎn),在得到的離散時(shí)間點(diǎn)處掛一個有序鏈表,用于存儲位于該時(shí)間點(diǎn)上的定時(shí)器,將海量的定時(shí)器通過一個有序鏈表離散開來,便于調(diào)度定時(shí)器;定時(shí)器的計(jì)時(shí)單位為毫秒,定時(shí)器的溢出時(shí)間使用無符號32位數(shù)據(jù)類型,系統(tǒng)時(shí)間使用有符號的32位數(shù)據(jù)類型; 所述時(shí)間輪子上鎖單元用于:插入定時(shí)器和調(diào)度定時(shí)器是在同一進(jìn)程中同時(shí)進(jìn)行對同一時(shí)間輪子同時(shí)進(jìn)行的操作,在插入定時(shí)器或調(diào)度定時(shí)器的時(shí)候,給時(shí)間輪子上鎖,以保證數(shù)據(jù)的可靠; 所述定時(shí)器插入單元用于:根據(jù)時(shí)間輪子和有序鏈表的關(guān)系,分配定時(shí)器使用的時(shí)間輪子的大小,并初始化定時(shí)器使用的時(shí)間輪子;進(jìn)入插入定時(shí)器的流程,根據(jù)定時(shí)器的溢出時(shí)間計(jì)算出時(shí)間輪子上的位置;根據(jù)定時(shí)器的溢出時(shí)間找到位于時(shí)間輪子上的鏈表位置,并將定時(shí)器插入到該位置下掛有序鏈表的合適位置; 所述定時(shí)器調(diào)度單元用于執(zhí)行以下流程: 步驟201、根據(jù)時(shí)間輪子和有序鏈表的關(guān)系,分配定時(shí)器使用的時(shí)間輪子的大小,并初始化定時(shí)器使用的時(shí)間輪子; 步驟202、進(jìn)入調(diào)度定時(shí)器的流程; 步驟203、讀取系統(tǒng)的當(dāng)前時(shí)間,根據(jù)離散算法將系統(tǒng)的當(dāng)前時(shí)間轉(zhuǎn)換為系統(tǒng)時(shí)間的滴答; 在第25天的時(shí)候,即當(dāng)定時(shí)器的溢出時(shí)間的符號位為I時(shí),將未調(diào)度的所有定時(shí)器的溢出時(shí)間進(jìn)行以下轉(zhuǎn)換:根據(jù)定時(shí)器的溢出時(shí)間的高位來判斷是否發(fā)生翻轉(zhuǎn),如果定時(shí)器的溢出時(shí)間的高位為1,則將定時(shí)器的溢出時(shí)間的高位置為0,即將定時(shí)器的溢出時(shí)間與數(shù)據(jù)0x7fffffff做位與運(yùn)算;如果定時(shí)器的溢出時(shí)間的高位為0,則將定時(shí)器的溢出時(shí)間賦值為0,保證該定時(shí)器被及時(shí)調(diào)度; 步驟204、讀取時(shí)間輪子上記錄的滴答,比較系統(tǒng)時(shí)間的滴答與時(shí)間輪子上記錄的滴答是否相等,如果不相等,則轉(zhuǎn)到步驟205 ;如果相等,則返回到步驟201 ; 步驟205、順序執(zhí)行位于該時(shí)間輪子上面的有序鏈表的溢出定時(shí)器的處理流程,轉(zhuǎn)到步驟 206 ; 步驟206、將執(zhí)行過的定時(shí)器從有序鏈表刪除,轉(zhuǎn)到步驟207 ; 步驟207、執(zhí)行后將時(shí)間輪子記錄的滴答遞增,返回到步驟204。
【文檔編號】H04L12/24GK104301134SQ201410429177
【公開日】2015年1月21日 申請日期:2014年8月27日 優(yōu)先權(quán)日:2014年8月27日
【發(fā)明者】付華楷, 楊士杰 申請人:烽火通信科技股份有限公司