一種最大優(yōu)先級(jí)隊(duì)列的設(shè)計(jì)方法
【專利摘要】一種最大優(yōu)先級(jí)隊(duì)列的設(shè)計(jì)方法,將要處理的數(shù)據(jù)分成兩個(gè)隊(duì)列,一級(jí)優(yōu)先級(jí)隊(duì)列queue和子隊(duì)列subqueue,兩個(gè)隊(duì)列的每個(gè)一級(jí)優(yōu)先級(jí)隊(duì)列又包含一個(gè)子隊(duì)列,一級(jí)隊(duì)列為優(yōu)先級(jí)隊(duì)列,使得高優(yōu)先級(jí)的數(shù)據(jù)提前出列,子隊(duì)列用來(lái)控制配額大小,使得該隊(duì)列中所有數(shù)據(jù)不會(huì)因?yàn)閮?yōu)先級(jí)過(guò)低而處于一直等待的狀態(tài);提出優(yōu)先級(jí)隊(duì)列的優(yōu)化方案,實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列與配額的結(jié)合應(yīng)用,解決在數(shù)據(jù)通信過(guò)程中,因系統(tǒng)處理大量數(shù)據(jù)不及時(shí)導(dǎo)致網(wǎng)絡(luò)擁塞的問(wèn)題,同時(shí)提高了系統(tǒng)的承載能力和處理能力,充分發(fā)揮系統(tǒng)的性能,有效提高系統(tǒng)在長(zhǎng)時(shí)間高負(fù)載的下的承載能力和數(shù)據(jù)處理能力。
【專利說(shuō)明】一種最大優(yōu)先級(jí)隊(duì)列的設(shè)計(jì)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明是一種優(yōu)先級(jí)隊(duì)列設(shè)計(jì)方法,本優(yōu)先級(jí)隊(duì)列設(shè)計(jì)方法用于解決在數(shù)據(jù)通信過(guò)程中,因系統(tǒng)處理大量數(shù)據(jù)不及時(shí),導(dǎo)致網(wǎng)絡(luò)擁塞的問(wèn)題。通過(guò)該設(shè)計(jì)方法,實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列與配額的結(jié)合應(yīng)用。
技術(shù)背景
[0002]隊(duì)列是一種滿足先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)從隊(duì)列頭部取出,新的數(shù)據(jù)從隊(duì)列尾部插入,數(shù)據(jù)之間是平等的,不存在優(yōu)先級(jí)的。這個(gè)就類似于普通老百姓到火車(chē)站排隊(duì)買(mǎi)票,先來(lái)的先買(mǎi)票,每個(gè)人之間是平等的,不存在優(yōu)先的權(quán)利,整個(gè)過(guò)程是固定不變的。而優(yōu)先級(jí)隊(duì)列可以理解為在隊(duì)列的基礎(chǔ)上給每個(gè)數(shù)據(jù)賦一個(gè)權(quán)值,代表數(shù)據(jù)的優(yōu)先級(jí)。與隊(duì)列類似,優(yōu)先級(jí)隊(duì)列也是從頭部取出數(shù)據(jù),從尾部插入數(shù)據(jù),但是這個(gè)過(guò)程根據(jù)數(shù)據(jù)的優(yōu)先級(jí)而變化的,總是優(yōu)先級(jí)高的先出來(lái),所以不一定是先進(jìn)先出的。這個(gè)過(guò)就類似于買(mǎi)火車(chē)票時(shí)候軍人比普通人優(yōu)先買(mǎi),雖然軍人來(lái)的晚,但是軍人的優(yōu)先級(jí)比普通人高,總是能夠先買(mǎi)到票。通常優(yōu)先級(jí)隊(duì)列用在操作系統(tǒng)中的多任務(wù)調(diào)度,任務(wù)優(yōu)先級(jí)越高,任務(wù)優(yōu)先執(zhí)行(類似于出隊(duì)列),后來(lái)的任務(wù)如果優(yōu)先級(jí)比以前的高,則需要調(diào)整該任務(wù)到合適的位置,以便于優(yōu)先執(zhí)行,整個(gè)過(guò)程總是使得隊(duì)列中的任務(wù)的第一任務(wù)的優(yōu)先級(jí)最高。
[0003]配額在本專利中是指對(duì)于優(yōu)先級(jí)隊(duì)列中的子優(yōu)先級(jí)隊(duì)列每次可發(fā)送的數(shù)據(jù)長(zhǎng)度。
【發(fā)明內(nèi)容】
[0004]一種優(yōu)先級(jí)隊(duì)列設(shè)計(jì)方法,本發(fā)明涉及一種最大優(yōu)先級(jí)隊(duì)列的設(shè)計(jì)實(shí)現(xiàn)方法,該優(yōu)先級(jí)隊(duì)列在出隊(duì)時(shí),總是對(duì)應(yīng)優(yōu)先級(jí)最大的數(shù)據(jù)出隊(duì)。該方法同時(shí)將配額與優(yōu)先級(jí)隊(duì)列緊密的結(jié)合在一起,使得該優(yōu)先級(jí)更智能的處理數(shù)據(jù)隊(duì)列,從而提高數(shù)據(jù)處理的效率。
[0005](I)該設(shè)計(jì)方法主要有兩個(gè)隊(duì)列組成,一級(jí)優(yōu)先級(jí)隊(duì)列(queue)和子隊(duì)列(subqueue),每個(gè)一級(jí)優(yōu)先級(jí)隊(duì)列數(shù)據(jù)包含一個(gè)子隊(duì)列,一級(jí)隊(duì)列為優(yōu)先級(jí)隊(duì)列,使得高優(yōu)先級(jí)的數(shù)據(jù)可以提前出列,子隊(duì)列用來(lái)控制配額大小,使得該隊(duì)列中所有數(shù)據(jù)不會(huì)因?yàn)閮?yōu)先級(jí)過(guò)低而處于一直等待的狀態(tài)。
[0006](2)本方法的設(shè)計(jì)思想為:數(shù)據(jù)入隊(duì)可選擇從前入隊(duì)或者從尾部入隊(duì)兩種方式,當(dāng)優(yōu)先級(jí)隊(duì)列中的數(shù)據(jù)出隊(duì)時(shí),首先從queue中優(yōu)先級(jí)最高的數(shù)據(jù)出隊(duì),遍歷該subqueue配額token大小,若其配額大于數(shù)據(jù)長(zhǎng)度,則直接出隊(duì)。并根據(jù)子隊(duì)列(subqueue)優(yōu)先級(jí)和數(shù)據(jù)長(zhǎng)度重新計(jì)算其余子隊(duì)列的配額大?。蝗糇雨?duì)列(subqueue)中的配額小于其數(shù)據(jù)長(zhǎng)度,則按照嚴(yán)格的優(yōu)先級(jí)進(jìn)行出隊(duì),并動(dòng)態(tài)計(jì)算各個(gè)子隊(duì)列中配額的大小(根據(jù)本次所發(fā)的數(shù)據(jù)長(zhǎng)度和子隊(duì)列的優(yōu)先級(jí)等進(jìn)行計(jì)算)。
[0007](3)根據(jù)(2)的設(shè)計(jì)思想,設(shè)計(jì)queue的數(shù)據(jù)結(jié)構(gòu)如下: map〈unsigned, SubQueue> Queue
其中unsigned為該數(shù)據(jù)的優(yōu)先級(jí),SubQueue為子優(yōu)先級(jí)隊(duì)列。
[0008]根據(jù)(2)的設(shè)計(jì)思想和queue數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)subqueue的數(shù)據(jù)結(jié)構(gòu)如下:map〈K, list〈pair〈unsigned, T> > >
其中K為標(biāo)示該連接唯一的ID, unsigned為數(shù)據(jù)的配額(token)大小,在數(shù)據(jù)中則為數(shù)據(jù)的字節(jié)長(zhǎng)度。T為具體的數(shù)據(jù)。
[0009]根據(jù)前面的設(shè)計(jì)方法,設(shè)定其計(jì)算配額(token)的方法,默認(rèn)配額均為0,配額的計(jì)算公式如下:
token+= (priority氺msg_len/total_priority+l)
其中token為優(yōu)先級(jí)隊(duì)列中當(dāng)前數(shù)據(jù)的配額大小,priority為當(dāng)前優(yōu)先級(jí)數(shù)據(jù)的優(yōu)先級(jí)大小,msg_len為當(dāng)前出隊(duì)的數(shù)據(jù)長(zhǎng)度,total_priority為當(dāng)前優(yōu)先級(jí)隊(duì)列總的優(yōu)先級(jí)大小之和。
[0010]本發(fā)明的優(yōu)異效果如下:提出優(yōu)先級(jí)隊(duì)列的優(yōu)化方案,實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列與配額的結(jié)合應(yīng)用,解決在數(shù)據(jù)通信過(guò)程中,因系統(tǒng)處理大量數(shù)據(jù)不及時(shí)導(dǎo)致網(wǎng)絡(luò)擁塞的問(wèn)題,同時(shí)提聞了系統(tǒng)的承載能力和處理能力,充分發(fā)?車(chē)系統(tǒng)的性能,有效提聞系統(tǒng)在長(zhǎng)時(shí)間聞負(fù)載的下的承載能力和數(shù)據(jù)處理能力,該優(yōu)先級(jí)隊(duì)列在出隊(duì)時(shí),總是對(duì)應(yīng)優(yōu)先級(jí)最大的數(shù)據(jù)出隊(duì),同時(shí)將配額與優(yōu)先級(jí)隊(duì)列緊密的結(jié)合在一起,使得該優(yōu)先級(jí)更智能的處理數(shù)據(jù)隊(duì)列,從而提高數(shù)據(jù)處理的效率。
【專利附圖】
【附圖說(shuō)明】
[0011]圖1是數(shù)據(jù)入隊(duì)方式;
圖2是數(shù)據(jù)出隊(duì)方式。
【具體實(shí)施方式】
[0012]下面參照附圖,對(duì)本發(fā)明的內(nèi)容以一個(gè)具體實(shí)例來(lái)描述實(shí)現(xiàn)這一設(shè)計(jì)方法的實(shí)現(xiàn)過(guò)程。
[0013] 正如
【發(fā)明內(nèi)容】
中所描述的,本發(fā)明是一種優(yōu)先級(jí)隊(duì)列的設(shè)計(jì)方法,它與配額緊密的結(jié)合在一起,從而更加智能的處理隊(duì)列中的數(shù)據(jù),防止優(yōu)先級(jí)別低的數(shù)據(jù)一直處于等待狀態(tài)。
[0014]在一個(gè)典型的配置環(huán)境里,如果是入隊(duì)操作,數(shù)據(jù)寫(xiě)入到優(yōu)先級(jí)隊(duì)列,只需在根據(jù)數(shù)據(jù)優(yōu)先級(jí)的不同,選擇其子隊(duì)列,將數(shù)據(jù)插入到子隊(duì)列的尾部即可,如圖1所示。
[0015]優(yōu)先級(jí)隊(duì)列中的出隊(duì)操作,首先選擇優(yōu)先級(jí)最大的子隊(duì)列進(jìn)行出列,Α->Β是指在優(yōu)先級(jí)為3的隊(duì)列的配額(token)大于子隊(duì)列的所有數(shù)據(jù)長(zhǎng)度,則將優(yōu)先級(jí)為3的隊(duì)列中的數(shù)據(jù)全部出隊(duì),并動(dòng)態(tài)計(jì)算其他優(yōu)先級(jí)的配額大小(根據(jù)3中配額計(jì)算方法動(dòng)態(tài)調(diào)整)。而優(yōu)先級(jí)為2、1、0的隊(duì)列中的數(shù)據(jù)長(zhǎng)度均大于當(dāng)前配額大小,則只出隊(duì)小于配額的一部分?jǐn)?shù)據(jù),其余數(shù)據(jù)等待下次出列。B->C是指在經(jīng)過(guò)優(yōu)先級(jí)和配額的配合使用后,剩余的數(shù)據(jù)嚴(yán)格的按照優(yōu)先級(jí)隊(duì)列,在本例中首先出列優(yōu)先級(jí)為2 (當(dāng)前優(yōu)先級(jí)最大,且有數(shù)據(jù))的子隊(duì)列數(shù)據(jù),然后依次將優(yōu)先級(jí)為I和O的隊(duì)列中的數(shù)據(jù)依次出隊(duì)。至此完成所有的數(shù)據(jù)出隊(duì)操作。
[0016]該設(shè)計(jì)方法將優(yōu)先級(jí)和配額緊密的結(jié)合在一起,使得系統(tǒng)在數(shù)據(jù)壓力較大的情況下減少數(shù)據(jù)超時(shí)而引起的重連。采用這種技術(shù),在一定程度上提高了系統(tǒng)的性能,同時(shí)也進(jìn)一步提高了系統(tǒng)在海量數(shù)據(jù)處理下的承載能力。
【權(quán)利要求】
1.一種最大優(yōu)先級(jí)隊(duì)列的設(shè)計(jì)方法,其特征在于具體步驟如下: (1)將要處理的數(shù)據(jù)分成兩個(gè)隊(duì)列,一級(jí)優(yōu)先級(jí)隊(duì)列queue和子隊(duì)列subqueue,兩個(gè)隊(duì)列的每個(gè)一級(jí)優(yōu)先級(jí)隊(duì)列又包含一個(gè)子隊(duì)列,一級(jí)隊(duì)列為優(yōu)先級(jí)隊(duì)列,使得高優(yōu)先級(jí)的數(shù)據(jù)提前出列,子隊(duì)列用來(lái)控制配額大小,使得該隊(duì)列中所有數(shù)據(jù)不會(huì)因?yàn)閮?yōu)先級(jí)過(guò)低而處于一直等待的狀態(tài); (2)數(shù)據(jù)入隊(duì)選擇從前入隊(duì)或者從尾部入隊(duì)兩種方式,當(dāng)優(yōu)先級(jí)隊(duì)列中的數(shù)據(jù)出隊(duì)時(shí),首先從一級(jí)優(yōu)先級(jí)隊(duì)列queue中優(yōu)先級(jí)最高的數(shù)據(jù)出隊(duì),遍歷該子隊(duì)列subqueue配額token大小,若其配額token大于數(shù)據(jù)長(zhǎng)度,則直接出隊(duì),并根據(jù)子隊(duì)列subqueue優(yōu)先級(jí)和數(shù)據(jù)長(zhǎng)度重新計(jì)算其余子隊(duì)列subqueue的配額大??;若子隊(duì)列subqueue中的配額小于其數(shù)據(jù)長(zhǎng)度,則按照嚴(yán)格的優(yōu)先級(jí)進(jìn)行出隊(duì),并動(dòng)態(tài)計(jì)算各個(gè)子隊(duì)列subqueue中配額的大小,根據(jù)本次所發(fā)的數(shù)據(jù)長(zhǎng)度和子隊(duì)列subqueue的優(yōu)先級(jí)進(jìn)行計(jì)算; (3)根據(jù)步驟(2)—級(jí)優(yōu)先級(jí)隊(duì)列queue的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)如下: map<unsigned, SubQueue> Queue 其中unsigned為該數(shù)據(jù)的優(yōu)先級(jí),SubQueue為子優(yōu)先級(jí)隊(duì)列; 根據(jù)步驟(2)的設(shè)計(jì)思想和一級(jí)優(yōu)先級(jí)隊(duì)列queue數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)子隊(duì)列subqueue的數(shù)據(jù)結(jié)構(gòu)如下:
map〈K, list〈pair〈unsigned, T> > > 其中K為標(biāo)示該連接唯一的ID, unsigned為數(shù)據(jù)的配額token大小,在數(shù)據(jù)中則為數(shù)據(jù)的字節(jié)長(zhǎng)度,T為具體的數(shù)據(jù); 根據(jù)步驟(1)- (3)的設(shè)計(jì)方法,設(shè)定其計(jì)算配額token的方法,默認(rèn)配額均為0,配額的計(jì)算公式如下:
token+= (priority氺msg_len/total_priority+l) 其中token+為優(yōu)先級(jí)隊(duì)列中當(dāng)前數(shù)據(jù)的配額大小,priority為當(dāng)前優(yōu)先級(jí)數(shù)據(jù)的優(yōu)先級(jí)大小,msg_len為當(dāng)前出隊(duì)的數(shù)據(jù)長(zhǎng)度,total_priority為當(dāng)前優(yōu)先級(jí)隊(duì)列總的優(yōu)先級(jí)大小之和。
【文檔編號(hào)】H04L12/865GK103986668SQ201410228594
【公開(kāi)日】2014年8月13日 申請(qǐng)日期:2014年5月28日 優(yōu)先權(quán)日:2014年5月28日
【發(fā)明者】范明彬, 張?jiān)谫F 申請(qǐng)人:浪潮電子信息產(chǎn)業(yè)股份有限公司