專利名稱:多二叉樹循環定時器調度方法
技術領域:
本發明涉及計算機軟件技術領域的定時器調度方法,尤其是一種在通訊接入服務器領域中,用于處理多用戶接入業務時的多定時器的調度方法。
背景技術:
定時器及其對定時事件的處理,是計算機軟件開發中的一項常用技術,特別是在系統支撐軟件中,此類技術的使用率最高。很多情況下,一個系統中往往會有幾萬、甚至幾十萬個定時器,如何高效地調度定時器,是提高支撐軟件性能、從而提高整個軟件系統性能的關鍵。
現有技術中,常用的定時器調度方法主要有以下幾種1.輪詢定時器調度法輪詢定時器調度法通常用于系統中只存在少量定時器的情況下,如圖1所示,圖中的每一個小方框代表一個定時器,該方法是在每個定時周期內將所有定時器隊列掃描一遍,然后,把每個定時器的剩余時間減一,看看是否有定時器超時,并觸發其中超時的定時器。顯然,這種方法在定時周期很短的條件下,能夠掃描的定時器數量是非常有限的。
2.差分定時器調度法差分定時器調度法是把定時器按照到時時刻的先后順序排成一個長鏈,每一個定時器只記錄自己到時時刻與上一個定時器到時時間的時間差,如圖2所。示利用這種方法判斷是否有定時器超時,只需要判斷鏈頭的第一個定時器即可,因此,幾乎沒有掃描開銷,但是,若要插入一個定時器,就需要遍歷整個鏈表,如果遇到鏈表中定時器的數量很大的情況下,插入過程會非常慢,尤其在插入動作非常頻繁的情況下。因此,這種方案只適合于定時器數量巨大,但是插入和刪除動作并不頻繁的情況下使用。
3.分類定時器調度法分類定時器調度法是將定時器按照定時器的時長進行分類,每一類定時器構造一個鏈表,如圖3所示。其中,將定時器按照定時時長20t、30t、40t分別構造了a、b、c三個鏈表,當判斷是否有定時器超時時,只需在每一個定時周期內掃描定時器鏈表中的第一個定時器即可。由于每個鏈表中只有一種定時時延,因此,新定時器也可直接插入它所屬定時器類鏈的尾部。這種方法既利用差分定時器調度方法的優點,同時又針對系統的特殊性,克服了差分定時器調度方法插入效率低的缺點。但由以上描述也可得知,當定時器時長種類很少時,這種方法效率很高,但是它不能應付定時器時長種類過多,或者可變的情況。
4.按2的冪次方分類定時器的調度方法中國知識產權局公開號為1366416的專利《一種定時器調度方法》,就是這種定時器調度方法。它是分類定時器調度方法的一種改進方案,它將定時器按時長1、2、22、...、2k分成K+1類,對每類定時器鏈的操作同分類定時器調度方法相同。對于時長為2的冪次方的定時器,直接將其插入相應的定時器類鏈;如果定時器的時長不為2的冪次方,就將這個定時器拆分成多個2的冪次方的和,然后,先將最高次冪的分項插入相應的定時器類鏈,等這個分項超時后,再把剩余的分項中的最高次冪的分項插入相應類鏈,依此類推,直到所有的分項都被插入并已超時時,這個定時器也就超時了。如圖4所示,k=7,共有8個鏈表,時長類別為20、21、22、23、24、25、26和27。例如,對于時長為23的定時器,拆分為23=24+22+21+20,首先將這個定時器插入到24鏈的尾部,當16個定時周期后,又將這個定時器再次插入22鏈的尾部,再等4個定時周期過后,再次將這個定時器插入21鏈的尾部,繼續等2個定時周期后,最后將這個定時器插入20鏈的尾部,等一個定時周期后,這個定時器超時觸發。這種定時器調度方法有效的解決了分類定時器調度法中不能適合任意長度定時器的難題,但是也引入了一些其它問題1)如果k值比較大,則在每個定時周期內掃描的鏈過多,從而導致工作效率降低。
2)另一方面,當每一類定時器鏈鏈頭時長被減成0后,還要對鏈上的每個定時器都做一次比較,判斷是否它所代表的定時器超時,如果不超時,又要在其它鏈重設相應的定時器,效率較低。
3)對每個不為2的冪次方的定時器,還要拆分成2的冪次方項之和,這也需要一定的系統開銷。
因此,這種方法適合于時長為2的冪次方的定時器,并且定時周期不能短,否則掃描開銷太大。
從上面所述現有的幾種定時器調度法可以看出,定時器調度主要解決下面幾個問題1.定時周期一般很短,因此要求每個定時周期的掃描要快,否則系統開銷太大;2.新定時器的插入效率要高,但是不能影響掃描,否則也會降低調度效率;3.調度方法要有通用性,適合各種時長的定時器。
上面所述現有定時器調度方法中,輪詢法掃描與插入都不快,差分法掃描快插入慢,分類法插入快掃描慢且不通用,2的冪次方法插入快掃描慢,因此,提供一種能全面解決上述三方面問題的定時器調度方法,是目前本領域函待解決的問題。
發明內容
本發明的目的正是為了解決現有的各種定時器調度方法中存在的問題,而提供一種定時器調度方法,該方法采用多二叉樹循環定時器調度方法,將定時器組織在多個鏈表中,并且每個鏈表是一棵二叉樹,從而能夠有效解決上面關于定時器調度的三個問題的有效方法,使定時器調度高效、可靠且具有通用性。
本發明提供一種多二叉樹循環定時器調度方法,其特征在于,該方法包含以下步驟多二叉數定時器結構的組成將系統中的定時器組織成N個鏈表,每個鏈表的結構為一個二叉樹;二叉樹上的每個節點對應系統中的每個定時器;設置每個節點的左子樹上的定時器的定時時長與父節點的定時時長相等;設置每個節點的右子樹上的定時器的定時時長大于父節點的定時時長。
對整個多二叉樹結構的定時器組合進行循環掃描循環掃描系統中對應于定時器的多二叉樹結構;對該樹根的定時值做減1操作,如果該樹根的定時值減1后為0,則這棵樹的樹根與其左子樹上的定時器超時,從這棵樹上修剪掉這些定時器,并觸發這些定時器;在多二叉數定時器結構中插入新定時器當系統中有新的定時器W插入時,根據該定時器的定時時長T1、當前掃描位置P、二叉樹的總數N,按照公式L=(P+(T1 Mod N))Mod N,計算出新定時器W應插入的二叉樹L;按照公式T2=T1/N+1,得出新定時器定時節點的定時值T2;從應當插入新定時器的二叉樹L的根節點H開始,沿著其右子樹,比較二叉樹L的根節點H的定時值與新定時器定時節點的定時值T2,確定新定時器的插入位置。
本發明在繼承了差分定時器調度方法掃描快優點的同時,還吸取了分類定時器調度方法插入快的特點,是掃描效率最好的定時器調度方法,而且能夠實現在系統中有大量定時器存在時,高效插入新定時器,具有良好通用性的定時器調度方法。
圖1是現有技術中的輪詢定時器調度法的方框示意圖;圖2是現有技術中的差分定時器調度法的方框示意圖;圖3是現有技術中的分類定時器調度法的方框示意圖;圖4是現有技術中的按2的冪次方分類定時器調度方法的方框示意圖;圖5是本發明的多二叉樹循環定時器調度方法的方框示意圖;圖6是本發明的總體流程圖;圖7是本發明的掃描流程圖;圖8是本發明的插入新定時器的操作流程圖。
具體實施例方式
本發明提出的定時器調度方法,是一種多二叉樹循環定時器調度方法,將定時器組織在多個鏈表中,每個鏈表的結構是一棵二叉樹,二叉樹的每個節點代表一個定時器。然后,采用循環掃描法對多個鏈表進行掃描,具體掃描方法是在每個定時周期,只掃描一個鏈表,下一個定時周期就掃描下一個鏈表,并與差分法相同,只對鏈頭進行減1操作。組織成多鏈的目的,是提高插入速度。如圖5所示,圖例中共有64棵二叉樹,每個定時周期只掃描一棵樹,從第0棵二叉樹開始,依次掃描第1、2、...、直到第63棵樹,然后又回到第0棵樹,重新開始下一輪循環。
如圖6所示,多二叉樹循環定時器調度方法的具體實現流程分為三個部分即多二叉樹定時器結構的組織、插入流程與掃描流程,這三個流程分別包括以下步驟1)多二叉樹定時器結構的組織將系統中的定時器組織在N個鏈表中,每個鏈表的結構為一個二叉樹,每個二叉樹的編號分別為0,1,...,N-1。二叉樹上的每個節點是一個定時器,每個節點的左子樹上的定時器的定時時長與父節點的定時時長相等,每個節點的右子樹上的定時器的定時時長大于父節點的定時時長。
2)掃描流程第一步,確定掃描位置。在每一個定時周期,系統只掃描一棵二叉樹P,設P的初始值為0。采用循環掃描法,掃描完樹P后,修改P的值,使得當前的掃描指針改變,即P=(P+1)Mod N,其中Mod模運算。P的取值范圍為0、1、...、N-1。
第二步,掃描操作。掃描時,只檢查二叉樹P上的根節點定時器,并且將這個節點中存放的定時值減1;P的根節點定時值減1后,如果變為0,就從P樹上刪除該其樹根及其左子樹,此時P樹的右子樹變成了一個新的二叉樹,被刪除的定時器節點為超時定時器,觸發這些定時器。
以上掃描流程的具體步驟參見圖7所示。
如圖7所示,掃描流程的具體步驟如下設當前掃描的二叉樹的編號為P,其中P可以是0、…、N-1,其中N是本發明所提出的多二叉樹定時器結構中的二叉樹的個數,并設P樹樹根當前的定時值為t,步驟701;對該定時值作減1操作,即t=t-1,步驟702;判斷t值是否大于0,步驟703;如否,則P樹的樹根與其左子樹上的節點的定時器超時,觸發這些定時器,步驟704;從P樹上剪去P的樹根和其左子樹,步驟705;即P樹的樹根的右子樹變成新的P樹,步驟706;改變當前的掃描指針,即令P=(P+1)Mod N,其中Mod為取模運算,步驟707。
3)插入流程的關鍵步驟第一步,確定新定時器需要插入的二叉樹及其定時值當新的定時器W插入時,根據W的定時時長T1、當前掃描位置P、二叉樹的總數N,按照公式L=(P+(T1 Mod N))Mod N,計算出W應插入的樹L,并按照公式T2=T1/N+1,計算出在L樹中,W定時節點的定時值T2。
第二步,確定新定時器在上述步驟中定位的二叉樹中的插入位置從上述L樹的根節點H開始,沿著L的右子樹,按照比較定時值的方法,確定W在L中的插入位置。
如圖8所示,為本發明的插入流程,該流程包括以下步驟設新定時器W的時長為T1,P(0、…、N-1)為當前掃描的二叉樹編號,(此時系統中共有N棵二叉樹),步驟801;根據W的定時時長T1、當前掃描位置P、二叉樹的總數N,按照公式L=(P+(T1 Mod N))Mod N,計算出W應插入的樹L,并按照公式T2=T1/N+1,計算出在L樹中,W定時節點的定時值T2,步驟802;設H為二叉樹L的樹根,T2則為要插入的新定時器W的定時節點的定時值T2減去樹根H的定時值,即T2=T2-H的定時值,步驟803;判斷上一步驟中的T2的值是否大于0,并且樹根H有右子樹,步驟804;如滿足該條件,則如果H有右子樹,T2=T2-H的定時值,H=H的右子樹的根結點,步驟805;并返回步驟804對新的H值和T2值重新進行該步驟的條件判斷,如果樹根H沒有右子樹,則判斷T2值是否大于0,步驟806,如否,則表明H中的定時值大于T2,將W插入為H的左子樹的根結點,H的原左子樹變為W的左子樹,這個新節點的定時值為0,步驟807;否則,將W插入為H的右子樹的根節點,定時值為T2,步驟808;由此完成插入流程。
在插入流程中,需要選取一個合適的N值,才能使本發明提出的方法掃描快,插入新定時器的效率高。設系統中最多可有S個定時器,每個二叉樹上的定時器的平均值為S/N,那么插入時,平均比較次數為(S/N)/2。如果每個二叉樹上又有很多個相等的定時器,則這些定時器會集中在左子樹上,則插入比較的次數會更少。總之,采用這種定時器調度方法,在掃描與插入定時器兩個方面,都有很高的效率,并且該方法適合于任何定時器調度需求,具有通用性。
N值的選擇可根據系統中定時器的總數S、系統內存的大小以及定時周期等確定。N值越大,插入越快,但是占用內存越大。N值越小,插入越慢。當N等于1時,就變成近似的差分定時器調度方法。理論上,N的取值可以為1到S之間,但考慮到內存資源的情況,以及系統最大能同時觸發的定時器的個數Q,N取S/Q值較為合適。
下面通過對一具體實施例的描述,來進一步說明本發明的技術方案,并且通過實驗數據,說明本發明的有益效果中興通訊公司ZXDSL8220 ADSL局端設備的WAND板中有一個內置BNAS,它的設計目標是最多能同時接入用戶2048個。所設計的軟件系統要求,對于每個接入的用戶,BNAS能在10秒鐘內感知用戶和BNAS是斷開還是連接。為了達到這個設計目標,首先想到的方法是采用定時器技術。可是,由于每個接入用戶都是一個獨立的個體,其上下線時間并不是固定的,針對這種情況,采用定時器控制技術是最簡單、也是最容易的一項控制技術。但是,在設計時,又不可能對整個接入系統采用定時器控制技術來實現,而必須對每個接入用戶采用定時器控制技術來實現。而且接入系統中,在滿用戶的情況下,如果采用定時器技術,系統至少有2048個定時器,為了實現對每個接入用戶的其他一些接入控制,在最壞情況下,系統最多可同時有5*2048個定時器。另外,如果需要再增加接入用戶的個數,那么,系統中的定時器也會大幅增加。所以,必須找到一種高效的管理算法,否則,達不到系統的設計目標。本設計中,就采用了前面專利中所述的定時器調度方法,很好的達到了設計目標。下面是以這個BNAS中的在線檢測定時器為例,對這種調度方法的一些技術分析。
設系統中共有N棵二叉樹,S個在線檢測定時器,定時周期為m,在線檢測周期為T。其中S=2048N=64m=100毫秒T=10秒則T=100*m每棵樹上平均有SUM個定時器,其中,SUM=S/N=32。
另外,在周期T內,每個定時器必須觸發一次,因此,在每個定時周期,平均觸發的定時器的個數為Q=M/T*m=2048/100。那么,每棵樹的右子樹的平均深度為2。
綜上所述,采用本專利方法,對于2048個在線檢測定時器來說,掃描定時器的比較次數為1,插入定時器的比較次數平均為2。
下面是對上述實例在一個檢測周期內對接滿2048個接入用戶的情況進行定時器調度時,如果采用現有技術的各種定時器調度方法與本發明的多二叉樹循環定時器調度方法所做的比較數據1.若采用輪詢定時器調度方法在10秒內掃描定時器所做的減1次數為2048*100,插入新定時器所做的比較次數為2048,總共操作次數為a=2048*101=206848。
2.若采用差分定時器調度方法在10秒內掃描定時器所做的減1次數為100,插入新定時器所做的比較次數為2048*2020,總共操作次數為b=2048*2027+100=4192356。
3.若采用分類定時器調度方法至少需要100個類鏈,因此,在10秒內掃描定時器所做的減1次數為100*100,插入新定時器所做的比較次數為2048,總共操作次數為c=100*100+2048=12048。
4.若采用按2的冪次方分類定時器的調度方法至少需要7類鏈,因此,在10秒內掃描定時器所做的減1次數為100*7,插入新定時器所做的比較次數為3*2048,判斷定時器是否超時的比較次數為3*2048,拆分定時器的移位操作次數為2048*8,總共操作次數為d=100*7+2048*14=29372。
5.若采用本發明提出的多二叉樹循環定時器調度方法在10秒內掃描定時器所做的減1次數為100,插入新定時器所做的比較次數為2*2048,計算插入位置的運算次數為2048,總共操作次數為e=100+2048*3=6244。
通過上面的數據,可直接得出以下結論操作次數遞減的次序依次為e<c<d<a<b,本發明所提出的多二叉樹循環定時器調度方法的效率最高。
另外,以具有N個定時器,最大時長為T的通用定時器系統為例,對上面5種定時器調度法做一個比較分析1.輪詢定時器調度方法掃描比較次為N,插入比較數為1,總操作次數為A=N+1。
2.差分定時器調度方法掃描比較次數為1,插入比較次平均為N/2,總操作次數為B=1+N/2。
3.分類定時器調度方法掃描比較次數為T,插入比較次數為1,總的操作次數為C=T+1。
4.按2的冪次方分類定時器的調度方法掃描比較次數為log2T,插入比較次數平均為log2T,拆分運算次數為log2T,總操作次數為D=3*log2T.]]>5.本發明提供的多二叉樹循環定時器調度方法掃描比較次數為1,設總共有S棵樹,插入比較次數平均為(N/S)/2,插入計算次數為1,總操作次數為E=(N/S)/2+2。
通過以上數據可以得出結論,掃描效率最好的定時器調度方法是差分定時器調度方法和多二叉樹循環定時器調度方法。插入效率最好的定時器調度方法是分類定時器調度方法與輪詢定時器調度方法。因為,定時器的時鐘周期一般非常短,插入定時器的操作相對很少,因此,作為一個通用定時器調度方法,首先掃描的效率必須很高,其次才是插入的效率。從這一方面來看,本發明所述方法是掃描效率最好的定時器調度方法中,插入效率最好的且能通用的定時器調度方法。
以上內容僅為本發明的較佳實施例,其目的并非用于對本發明所提出的系統及方法的限制,本發明的保護范圍以權利要求為準。在不脫離本發明的精神和范圍的情況下,本領域技術人員在不偏離本發明的范圍和精神的情況下,對其進行的關于形式和細節的種種顯而易見的修改或變化均應落在本發明的保護范圍之內。
權利要求
1.一種多二叉樹循環定時器調度方法,其特征在于,該方法包含以下步驟多二叉數定時器結構的組成將系統中的定時器組織成N個鏈表,每個鏈表的結構為一個二叉樹;二叉樹上的每個節點對應系統中的每個定時器;設置每個節點的左子樹上的定時器的定時時長與父節點的定時時長相等;設置每個節點的右子樹上的定時器的定時時長大于父節點的定時時長;對整個多二叉樹結構的定時器組合進行循環掃描循環掃描系統中對應于定時器的多二叉樹結構;對該樹根的定時值做減1操作,如果該樹根的定時值減1后為0,則這棵樹的樹根與其左子樹上的定時器超時,從這棵樹上修剪掉這些定時器,并觸發這些定時器;在多二叉數定時器結構中插入新定時器當系統中有新的定時器W插入時,根據該定時器的定時時長T1、當前掃描位置P、二叉樹的總數N,按照公式L=(P+(T1 Mod N))Mod N,計算出新定時器W應插入的二叉樹L;按照公式T2=T1/N+1,得出新定時器定時節點的定時值T2;從應當插入新定時器的二叉樹L的根節點H開始,沿著其右子樹,比較二叉樹L的根節點H的定時值與新定時器定時節點的定時值T2,確定新定時器的插入位置。
2.如權利要求1所述的多二叉樹循環定時器調度方法,其特征在于,所述比較二叉樹L的根節點H的定時值與新定時器定時節點的定時值T2,確定新定時器的插入位置的步驟,還包括如果二叉樹H的定時值大于T2,則將新定時器W插入二叉樹L的樹根H的左子樹的根結點,將二叉樹L的樹根H的原左子樹變為新定時器W的左子樹,并且新節點的定時值為0;如果T2的值大于二叉樹H中的定時值,則將新定時器W插入為二叉樹H的右子樹的根結點,并且設該節點上定時器的定時值為T2。
3.如權利要求1所述的多二叉樹循環定時器調度方法,其特征在于,所述二叉樹的總數N與系統中定時器的總數成正比,與系統最大能同時觸發的定時器的個數成反比。
全文摘要
一種多二叉樹循環定時器調度方法,將定時器組織在多個鏈表中,并且每個鏈表是一棵二叉樹,二叉樹上的每個節點對應系統中的每個定時器;循環掃描系統中對應于定時器的多二叉樹結構;當系統中有新的定時器插入時,先計算得出新定時器應插入的二叉樹;然后,從該二叉樹的根節點開始,沿著其右子樹,比較二叉樹的根節點的定時值與新定時器定時節點的定時值,從而確定新定時器的插入位置,與現有技術相比,本發明在繼承了差分定時器調度方法掃描快優點的同時,還吸取了分類定時器調度方法插入快的特點,是掃描效率最好的定時器調度方法,而且能夠實現在系統中有大量定時器存在時高效插入新定時器,能具有良好通用性的定時器調度方法。
文檔編號H04M15/00GK1545308SQ20031010710
公開日2004年11月10日 申請日期2003年11月25日 優先權日2003年11月25日
發明者田平, 李華, 劉興銓, 胡鵬, 田 平 申請人:中興通訊股份有限公司