專(zhuān)利名稱(chēng):海量定時(shí)器的調(diào)度方法
技術(shù)領(lǐng)域:
本發(fā)明涉及定時(shí)器領(lǐng)域,具體來(lái)說(shuō)是涉及一種海量定時(shí)器的調(diào)度方法。
一般來(lái)講,定時(shí)器調(diào)度方法包含如下基本步驟用于定時(shí)器啟動(dòng)的插入步驟;用于定時(shí)器中止或超時(shí)的刪除步驟;用于操作系統(tǒng)監(jiān)視激活的定時(shí)器的掃描步驟。其中掃描步驟是由一個(gè)周期為T(mén)的操作系統(tǒng)提供的定時(shí)器進(jìn)行驅(qū)動(dòng),在該定時(shí)器的驅(qū)動(dòng)下,在每個(gè)掃描周期對(duì)等待超時(shí)的定時(shí)器進(jìn)行一次檢查,使到時(shí)的預(yù)先登記時(shí)長(zhǎng)的定時(shí)器通過(guò)刪除步驟進(jìn)入掛起狀態(tài)。定時(shí)器調(diào)度方法雖然只需使用一個(gè)或少數(shù)幾個(gè)系統(tǒng)級(jí)的定時(shí)器,但是卻可以對(duì)外提供多個(gè)定時(shí)器。
隨著通訊系統(tǒng)的容量越來(lái)越大,速度越來(lái)越快,協(xié)議越來(lái)越復(fù)雜,客戶(hù)對(duì)穩(wěn)定性要求越來(lái)越高,對(duì)定時(shí)器調(diào)度的要求也越來(lái)越高。如在大話務(wù)量負(fù)載仿真測(cè)試工具開(kāi)發(fā)過(guò)程中,該工具需要模擬巨大數(shù)量的用戶(hù)極其頻繁地發(fā)起長(zhǎng)短不一的呼叫,呼叫中許多特殊狀態(tài)的定時(shí)器精度要求非常高,經(jīng)常需要精確到10ms,而有些狀態(tài)(例如通話狀態(tài)等)的時(shí)長(zhǎng)要求非常長(zhǎng),可能要達(dá)到數(shù)小時(shí)或更長(zhǎng)。由于該測(cè)試工具是通用測(cè)試工具,狀態(tài)的屬性可以由用戶(hù)自由定制,每個(gè)狀態(tài)的等待時(shí)長(zhǎng)的可能范圍非常大,幾十毫秒到幾個(gè)小時(shí)不等,需要對(duì)不同長(zhǎng)度范圍和精度的定時(shí)器做不同的處理。
而現(xiàn)有的定時(shí)器調(diào)度方法主要有下面幾種1、輪詢(xún)定時(shí)器調(diào)度方法,是一種常用于少量定時(shí)器調(diào)度的輪詢(xún)方法,在每個(gè)掃描周期把所有的定時(shí)器檢查一遍,看看是否有定時(shí)器超時(shí),并且把每個(gè)定時(shí)器的剩余時(shí)間減一。很明顯,如果當(dāng)精度要求很高,掃描周期非常短時(shí),這種方法便不能在一個(gè)掃描周期內(nèi)檢查太多的定時(shí)器。
2、差分定時(shí)器調(diào)度方法。在該方法中,定時(shí)器按照到時(shí)時(shí)刻排列成一個(gè)長(zhǎng)鏈,每個(gè)定時(shí)器記錄自身到時(shí)時(shí)刻與上一個(gè)定時(shí)器到時(shí)時(shí)刻的時(shí)間差(即差分方案),這種方法幾乎沒(méi)有掃描開(kāi)銷(xiāo),在判斷是否有定時(shí)器超時(shí),只需判斷鏈表頭的第一個(gè)定時(shí)器即可。但是,如果要想插入一個(gè)新定時(shí)器,就必須遍歷鏈表,這樣,當(dāng)處于激活狀態(tài)的定時(shí)器數(shù)量非常大時(shí),插入過(guò)程就會(huì)很慢。
3、分類(lèi)定時(shí)器調(diào)度方法,這種方法采用定時(shí)器時(shí)長(zhǎng)分類(lèi)的方式,利用了差分定時(shí)器的優(yōu)點(diǎn),并且針對(duì)系統(tǒng)的特殊性克服差分定時(shí)器插入效率低的缺點(diǎn)。例如,在系統(tǒng)所用到的定時(shí)器長(zhǎng)度只有少數(shù)幾種的情況下,可以針對(duì)每個(gè)長(zhǎng)度的定時(shí)器構(gòu)造一個(gè)鏈表,由于每個(gè)鏈表只有一種定時(shí)時(shí)延,新登記的定時(shí)器插入該定時(shí)器所屬定時(shí)器類(lèi)的鏈表尾部,每個(gè)掃描周期掃描所有定時(shí)器鏈表的頭即可,由于定時(shí)器時(shí)長(zhǎng)的種類(lèi)很少,這種定時(shí)器非常高效。但是這種定時(shí)器只能應(yīng)付定時(shí)器時(shí)長(zhǎng)的可能取值有限的情況,對(duì)于超時(shí)時(shí)長(zhǎng)可能取值種類(lèi)過(guò)多或者可變的系統(tǒng)是不適用的。
另外,在現(xiàn)有技術(shù)中還有一些系統(tǒng)按照定時(shí)器的精度對(duì)定時(shí)器進(jìn)行分類(lèi),越高精度的定時(shí)器可定時(shí)的最大時(shí)長(zhǎng)越短。例如提供毫秒、秒鐘、分鐘、小時(shí)的數(shù)種定時(shí)器,用戶(hù)根據(jù)精度和長(zhǎng)度的要求選取相應(yīng)的類(lèi)別。這種定時(shí)器方案也可以做得非常高效,但卻存在使用相對(duì)比較麻煩,需要根據(jù)長(zhǎng)度和精度確定類(lèi)別的缺點(diǎn)。
以上將定時(shí)器分類(lèi)的方法在許多通訊協(xié)議軟件系統(tǒng)中得到應(yīng)用,但是這些方法使用起來(lái)需要指定類(lèi)別而不能任意直接指定時(shí)長(zhǎng),并且修改或者增刪類(lèi)別的維護(hù)工作比較煩瑣并且容易出錯(cuò)。
4、時(shí)間緩沖區(qū)方法。該方法將到時(shí)時(shí)刻做成一個(gè)固定尺寸的環(huán)型區(qū)域,一個(gè)代表當(dāng)前時(shí)刻的指針指向當(dāng)前時(shí)刻對(duì)應(yīng)的單元,該指針每過(guò)一個(gè)掃描周期便前進(jìn)一個(gè)單元,并且將該單元里面的定時(shí)器啟動(dòng)。登記定時(shí)器的時(shí)候,直接登記到該定時(shí)器到時(shí)時(shí)刻所對(duì)應(yīng)的位置上去。這種方案也是非常高效的通用方案,但缺點(diǎn)是定時(shí)的最大掃描周期數(shù)受環(huán)型區(qū)域尺寸的限制。如果要定時(shí)非常長(zhǎng)的時(shí)間間隔,即使沒(méi)有一個(gè)處于激活狀態(tài)的定時(shí)器,也需要巨大的內(nèi)存。
顯然,上述現(xiàn)有的定時(shí)器調(diào)度方法都存在各自的缺點(diǎn),而且由于皆動(dòng)態(tài)地分配和釋放內(nèi)存,從而造成了內(nèi)存碎片化。另外,雖然上述方法可以對(duì)不同長(zhǎng)度范圍和精度的定時(shí)器做不同的處理,但是會(huì)增大調(diào)度程序總的復(fù)雜性,增大應(yīng)用程序使用定時(shí)任務(wù)的難度,降低系統(tǒng)的可靠性。
為實(shí)現(xiàn)上述目的,本發(fā)明的海量定時(shí)器的調(diào)度方法包含如下具體步驟用于定時(shí)器啟動(dòng)的插入步驟;用于定時(shí)器中止的刪除步驟;用于操作系統(tǒng)監(jiān)視激活的定時(shí)器超時(shí)的掃描步驟。其中所述的掃描步驟包含下列步驟a、在每個(gè)掃描周期判斷定時(shí)器隊(duì)列中是否有激活的定時(shí)器,如果否,退出本步驟,如果是,繼續(xù);b、讀取位于定時(shí)器隊(duì)列頭部的定時(shí)器;c、判斷該定時(shí)器是否到時(shí),如果否,退出本步驟,如果是,繼續(xù);d、將該定時(shí)器對(duì)象從定時(shí)器隊(duì)列中清除并同時(shí)調(diào)整定時(shí)器隊(duì)列順序,然后回到步驟a。
所述的插入步驟包含先將到時(shí)時(shí)刻保存到定時(shí)器對(duì)象中,然后將該定時(shí)器對(duì)象插入容納定時(shí)器對(duì)象的定時(shí)器隊(duì)列中并同時(shí)調(diào)整隊(duì)列順序。
所述的刪除步驟包含先判斷該定時(shí)器是否被激活,如果未被激活則退出本步驟,否則清空該定時(shí)器,然后將該定時(shí)器對(duì)象從定時(shí)器隊(duì)列中清除并同時(shí)調(diào)整定時(shí)器隊(duì)列順序。
另外,所述的定時(shí)器隊(duì)列是指以堆數(shù)據(jù)結(jié)構(gòu)構(gòu)成的定時(shí)器隊(duì)列或者是以前序完全二叉樹(shù)結(jié)構(gòu)構(gòu)成的定時(shí)器隊(duì)列。
本發(fā)明通過(guò)使用堆數(shù)據(jù)結(jié)構(gòu)或前序完全二叉樹(shù)結(jié)構(gòu)對(duì)定時(shí)器隊(duì)列進(jìn)行組織,利用其中堆或者樹(shù)的優(yōu)良特性達(dá)到對(duì)海量定時(shí)器的高效調(diào)度,能夠有效地降低系統(tǒng)的復(fù)雜度,提高系統(tǒng)的穩(wěn)定性、可移植性和可維護(hù)性。具體來(lái)說(shuō)具有下述優(yōu)點(diǎn)1、能夠高效掃描大量處于激活狀態(tài)的定時(shí)器,執(zhí)行超時(shí)的定時(shí)器任務(wù);2、能夠高效插入、刪除定時(shí)器;3、可提供的定時(shí)時(shí)延范圍足夠大,應(yīng)用程序不必對(duì)特殊長(zhǎng)度的時(shí)延進(jìn)行特殊處理;4、定時(shí)的精度足夠高,滿(mǎn)足精確定時(shí)的需要。
下面結(jié)合附圖
和具體實(shí)施例來(lái)詳細(xì)描述本發(fā)明。
由于堆數(shù)據(jù)結(jié)構(gòu)具備一些優(yōu)良的特性,這種數(shù)據(jù)結(jié)構(gòu)可以在每次插入和刪除元素操作的時(shí)候迅速地進(jìn)行調(diào)整,保證操作之后數(shù)據(jù)仍然被組織為一個(gè)堆。只要數(shù)據(jù)被組織成為一個(gè)堆,就可以按照先后順序?qū)⒃靥崛〕鰜?lái),并且提取操作也是非常迅速的。上述各個(gè)基本步驟的具體過(guò)程為如圖2所示,所述的插入步驟包含先將到時(shí)時(shí)刻保存到定時(shí)器對(duì)象中,然后將該定時(shí)器對(duì)象插入容納定時(shí)器對(duì)象的堆數(shù)據(jù)結(jié)構(gòu)定時(shí)器隊(duì)列中并同時(shí)調(diào)整堆數(shù)據(jù)結(jié)構(gòu)。
如圖3所示,所述的刪除步驟包含先判斷該定時(shí)器是否被激活,如果未被激活則退出本步驟,否則清空該定時(shí)器,然后將該定時(shí)器對(duì)象從堆數(shù)據(jù)結(jié)構(gòu)定時(shí)器隊(duì)列中清除并同時(shí)調(diào)整堆數(shù)據(jù)結(jié)構(gòu)。
如圖4所示,所述的掃描步驟包含下列步驟1、在每個(gè)掃描周期判斷堆數(shù)據(jù)結(jié)構(gòu)定時(shí)器隊(duì)列中是否有激活的定時(shí)器,如果否,退出本步驟,如果是,繼續(xù);2、讀取位于堆數(shù)據(jù)結(jié)構(gòu)定時(shí)器隊(duì)列頭部的定時(shí)器;3、比較該定時(shí)器的定時(shí)時(shí)長(zhǎng)和系統(tǒng)的計(jì)時(shí)時(shí)長(zhǎng),如果二者不相等,退出本步驟,如果二者相等,繼續(xù);4、將該定時(shí)器對(duì)象從堆數(shù)據(jù)結(jié)構(gòu)定時(shí)器隊(duì)列中清除并同時(shí)調(diào)整堆數(shù)據(jù)結(jié)構(gòu),然后回到步驟1。
考慮到如果系統(tǒng)長(zhǎng)時(shí)間運(yùn)行,系統(tǒng)計(jì)時(shí)記數(shù)器可能會(huì)溢出,為了使系統(tǒng)在溢出的前后仍然能夠正確工作,本實(shí)施例使用32位無(wú)符號(hào)整數(shù)記錄時(shí)長(zhǎng)和系統(tǒng)計(jì)時(shí)記數(shù)器,這時(shí)計(jì)時(shí)時(shí)長(zhǎng)最大合法長(zhǎng)度可以達(dá)到10ms×(232-1)約497天,且所述的步驟c判斷定時(shí)器是否到時(shí)的比較中不使用大于或小于,而使用相等或不相等,只有在二者相等的時(shí)候才說(shuō)明該定時(shí)器在隊(duì)列中超時(shí),其他情況,無(wú)論是大于還是小于,都說(shuō)明該定時(shí)器沒(méi)有在該隊(duì)列中到時(shí)。這樣就可以巧妙地避開(kāi)系統(tǒng)計(jì)時(shí)記數(shù)器溢出后系統(tǒng)混亂的問(wèn)題,無(wú)論系統(tǒng)計(jì)時(shí)記數(shù)器溢出多少次,系統(tǒng)都可以毫無(wú)問(wèn)題地正常工作。
假設(shè)每一次掃描步驟的時(shí)間開(kāi)銷(xiāo)是O(1),通過(guò)本實(shí)施例所述的海量堆定時(shí)器的調(diào)度方法,每次插入步驟的時(shí)間開(kāi)銷(xiāo)是O(log(N)),每次刪除步驟的時(shí)間開(kāi)銷(xiāo)是O(log(N))。其中N為處于激活狀態(tài)的定時(shí)器數(shù)量。插入和刪除定時(shí)器的時(shí)間開(kāi)銷(xiāo)都是因調(diào)整堆數(shù)據(jù)結(jié)構(gòu)造成的。另外,由于實(shí)際系統(tǒng)的內(nèi)存限制,log(N)是存在上限的,例如32位系統(tǒng)中,0<=log(N))<32。
表1是本實(shí)施例和現(xiàn)有的幾種調(diào)度方法的性能比較,其中系統(tǒng)整數(shù)位數(shù)B定時(shí)器插入速度F(次/tick)定時(shí)器平均生存時(shí)長(zhǎng)T(tick)系統(tǒng)激活狀態(tài)的定時(shí)器個(gè)數(shù)N定時(shí)器內(nèi)存占用M可直接定時(shí)時(shí)長(zhǎng)數(shù)L(分類(lèi)定時(shí)器的)定時(shí)器類(lèi)別數(shù)C可以看出,現(xiàn)有的幾種調(diào)度方法在某些方面比本實(shí)施例所述的方法更快,但是在比較極端的情況下都存在嚴(yán)重的缺陷,導(dǎo)致現(xiàn)有的幾種調(diào)度方法在極端情況下很難使用。例如在PII300以上的機(jī)器上,每秒掃描100次,每秒插入1000個(gè)定時(shí)器,系統(tǒng)中有近1,000,000個(gè)定時(shí)器同時(shí)處于激活狀態(tài),這兩項(xiàng)操作所占用的CPU時(shí)間不到1/1000。也就是說(shuō),雖然這兩項(xiàng)比其他類(lèi)型定時(shí)器的最佳值要低,但是根本不足以構(gòu)成性能瓶頸。在基本內(nèi)存占用方面,本實(shí)施例在沒(méi)有激活的定時(shí)器的時(shí)候基本沒(méi)有開(kāi)銷(xiāo),所以完全可以應(yīng)用在單板的嵌入式環(huán)境中。
表1
表2是在極端情況下本實(shí)施例和現(xiàn)有的幾種調(diào)度方法的性能具體數(shù)據(jù)近似值的比較,系統(tǒng)整數(shù)位數(shù)為32,定時(shí)器插入速度為10次/掃描周期,定時(shí)器平均生存時(shí)長(zhǎng)為100,000掃描周期,緩沖定時(shí)器方法的可直接定時(shí)時(shí)長(zhǎng)數(shù)為1,000,000掃描周期,分分類(lèi)定時(shí)器方法中定時(shí)器類(lèi)別數(shù)為100個(gè)類(lèi)別,這樣,分類(lèi)調(diào)度方案就只能對(duì)100種時(shí)長(zhǎng)直接定時(shí),遠(yuǎn)遠(yuǎn)少于其他類(lèi)型定時(shí)器的可直接定時(shí)的時(shí)長(zhǎng)數(shù)。
表2
權(quán)利要求
1.一種海量定時(shí)器的調(diào)度方法,其特征在于該方法包含如下步驟用于定時(shí)器啟動(dòng)的插入步驟;用于定時(shí)器中止的刪除步驟;用于操作系統(tǒng)監(jiān)視激活的定時(shí)器超時(shí)的掃描步驟;其中,所述的掃描步驟包含下列步驟a、在每個(gè)掃描周期判斷定時(shí)器隊(duì)列中是否有激活的定時(shí)器,如果否,退出本步驟,如果是,繼續(xù);b、讀取位于定時(shí)器隊(duì)列頭部的定時(shí)器;c、判斷該定時(shí)器是否到時(shí),如果否,退出本步驟,如果是,繼續(xù);d、將該定時(shí)器對(duì)象從定時(shí)器隊(duì)列中清除并同時(shí)調(diào)整定時(shí)器隊(duì)列順序,然后回到步驟a。
2.如權(quán)利要求1所述的一種海量定時(shí)器的調(diào)度方法,其特征在于,所述插入步驟包含先將到時(shí)時(shí)刻保存到定時(shí)器對(duì)象中;然后將該定時(shí)器對(duì)象插入容納定時(shí)器對(duì)象的定時(shí)器隊(duì)列中并同時(shí)調(diào)整隊(duì)列順序。
3.如權(quán)利要求1所述的一種海量定時(shí)器的調(diào)度方法,其特征在于,所述刪除步驟包含先判斷該定時(shí)器是否被激活,如果未被激活則退出本步驟,否則清空該定時(shí)器;然后將該定時(shí)器對(duì)象從定時(shí)器隊(duì)列中清除并同時(shí)調(diào)整定時(shí)器隊(duì)列順序。
4.如權(quán)利要求1、2或3所述的一種海量定時(shí)器的調(diào)度方法,其特征在于,所述的定時(shí)器隊(duì)列是指以堆數(shù)據(jù)結(jié)構(gòu)構(gòu)成的定時(shí)器隊(duì)列或者是以前序完全二叉樹(shù)結(jié)構(gòu)構(gòu)成的定時(shí)器隊(duì)列。
5.如權(quán)利要求1、2或3所述的一種海量定時(shí)器的調(diào)度方法,其特征在于,所述的定時(shí)器是用無(wú)符號(hào)整數(shù)表示的。
6.如權(quán)利要求1所述的一種海量定時(shí)器的調(diào)度方法,其特征在于,所述步驟a中的計(jì)時(shí)是用無(wú)符號(hào)整數(shù)來(lái)計(jì)時(shí)的。
7.如權(quán)利要求1所述的一種海量定時(shí)器的調(diào)度方法,其特征在于,所述步驟c實(shí)現(xiàn)過(guò)程為比較該定時(shí)器的定時(shí)時(shí)長(zhǎng)和步驟a中的計(jì)時(shí)時(shí)長(zhǎng),如果二者不相等,退出本步驟,如果二者相等,繼續(xù)。
全文摘要
本發(fā)明提供了一種海量定時(shí)器的調(diào)度方法,該方法包含用于定時(shí)器啟動(dòng)的插入步驟、用于定時(shí)器中止的刪除步驟、用于操作系統(tǒng)監(jiān)視激活的定時(shí)器超時(shí)的掃描步驟;其中所述的掃描步驟包含下列步驟a.在每個(gè)周期判斷定時(shí)器隊(duì)列中是否有激活的定時(shí)器,如果否,退出本步驟,如果是,繼續(xù);b.讀取位于定時(shí)器隊(duì)列頭部的定時(shí)器;c.判斷該定時(shí)器是否到時(shí),如果否,退出本步驟,如果是,繼續(xù);d.將該定時(shí)器對(duì)象從定時(shí)器隊(duì)列中清除并同時(shí)調(diào)整定時(shí)器隊(duì)列順序,然后回到步驟a。本發(fā)明通過(guò)使用堆數(shù)據(jù)結(jié)構(gòu)或前序完全二叉樹(shù)結(jié)構(gòu)對(duì)定時(shí)器隊(duì)列進(jìn)行組織,利用其優(yōu)良特性對(duì)海量定時(shí)器的高效調(diào)度,能夠有效地降低系統(tǒng)的復(fù)雜度,提高系統(tǒng)的穩(wěn)定性、可移植性和可維護(hù)性。
文檔編號(hào)H04B17/00GK1474241SQ0212875
公開(kāi)日2004年2月11日 申請(qǐng)日期2002年8月7日 優(yōu)先權(quán)日2002年8月7日
發(fā)明者孫伊, 孫 伊 申請(qǐng)人:華為技術(shù)有限公司