專利名稱:一種元素出隊(duì)序列設(shè)置方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,特別涉及一種元素出隊(duì)序列設(shè)置方法及裝置。
背景技術(shù):
優(yōu)先級(jí)隊(duì)列是不同于先進(jìn)先出隊(duì)列的另一種隊(duì)列,每次從優(yōu)先級(jí)隊(duì)列中取出的是具有最高優(yōu)先級(jí)的元素。在實(shí)際應(yīng)用中,往往會(huì)出現(xiàn)高優(yōu)先級(jí)的元素源源不斷地進(jìn)入優(yōu)先級(jí)隊(duì)列,而每次從優(yōu)先級(jí)隊(duì)列中取出優(yōu)先級(jí)最高的元素,如此會(huì)出現(xiàn)優(yōu)先級(jí)隊(duì)列中的低優(yōu)先級(jí)的元素得不到取出機(jī)會(huì)而被“餓死”的現(xiàn)象。為了防止低優(yōu)先級(jí)的元素被“餓死”,目前提供了一種從優(yōu)先級(jí)隊(duì)列中取出元素的方法,該方法具體為為每個(gè)優(yōu)先級(jí)建立一個(gè)列表,進(jìn)入優(yōu)先級(jí)隊(duì)列的每個(gè)元素,根據(jù)自身的優(yōu)先級(jí)存放在對(duì)應(yīng)的列表中的最后一個(gè)元素之后,設(shè)置一個(gè)單獨(dú)的進(jìn)程,每隔一個(gè)周期掃描每個(gè)列表中的每個(gè)元素,并增加掃描的每個(gè)元素的優(yōu)先級(jí),根據(jù)掃描后的每個(gè)元素的優(yōu)先級(jí),將元素移動(dòng)到對(duì)應(yīng)的列表中的最后一個(gè)元素之后,在每次取出元素時(shí),從所有列表中取出當(dāng)前優(yōu)先級(jí)最高的元素。如此,優(yōu)先級(jí)隊(duì)列中的低優(yōu)先級(jí)的元素會(huì)隨著等待時(shí)間的延長(zhǎng)而得到增加,從而得到被取出的機(jī)會(huì)。在實(shí)現(xiàn)本發(fā)明的過(guò)程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問(wèn)題為每個(gè)優(yōu)先級(jí)設(shè)置列表,優(yōu)先級(jí)隊(duì)列包含的優(yōu)先級(jí)越多,設(shè)置的列表的數(shù)目也隨之越多,且需要設(shè)置單獨(dú)的進(jìn)程掃描優(yōu)先級(jí)隊(duì)列中的元素,如此增加資源消耗。
發(fā)明內(nèi)容
為了減少對(duì)系統(tǒng)資源的占用,本發(fā)明提供了一種元素出隊(duì)序列設(shè)置方法及裝置。 所述技術(shù)方案如下—種元素出隊(duì)序列設(shè)置方法,所述方法包括根據(jù)所述元素入隊(duì)時(shí)間和優(yōu)先級(jí),計(jì)算所述元素的出隊(duì)優(yōu)先級(jí);根據(jù)所述元素的出隊(duì)優(yōu)先級(jí)進(jìn)行排序,從而得到所述元素出隊(duì)序列。采用時(shí)間戳表示所述元素入隊(duì)時(shí)間,所述時(shí)間戳為元素入隊(duì)時(shí)間與標(biāo)準(zhǔn)時(shí)間的時(shí)間差。按如下公式計(jì)算所述元素的出隊(duì)優(yōu)先級(jí)OutSort = Timestamp-Priority氺Weight ;其中,OutSort為出隊(duì)優(yōu)先級(jí),Timestamp為時(shí)間戳,I^riority為元素優(yōu)先級(jí), Weight為加權(quán)值。根據(jù)所述元素的出隊(duì)優(yōu)先級(jí)中元素入隊(duì)時(shí)間和優(yōu)先級(jí)的權(quán)重設(shè)置所述加權(quán)值。所述計(jì)算所述元素的出隊(duì)優(yōu)先級(jí)之后,還包括對(duì)所述元素和所述元素的出隊(duì)優(yōu)先級(jí)進(jìn)行封裝。一種元素出隊(duì)序列設(shè)置裝置,所述裝置包括計(jì)算模塊,用于根據(jù)所述元素入隊(duì)時(shí)間和優(yōu)先級(jí),計(jì)算所述元素的出隊(duì)優(yōu)先級(jí);
排序模塊,用于根據(jù)所述元素的出隊(duì)優(yōu)先級(jí)進(jìn)行排序,從而得到所述元素出隊(duì)序列。采用時(shí)間戳表示所述元素入隊(duì)時(shí)間,所述時(shí)間戳為元素入隊(duì)時(shí)間與標(biāo)準(zhǔn)時(shí)間的時(shí)間差。所述計(jì)算模塊,具體用于按如下的公式計(jì)算出所述元素的出隊(duì)優(yōu)先級(jí);OutSort = Timestamp-Priority氺Weight ;其中,OutSort為出隊(duì)優(yōu)先級(jí),Timestamp為時(shí)間戳,Priority為元素的優(yōu)先級(jí), Weight為加權(quán)值。所述計(jì)算模塊還包括設(shè)置單元;所述設(shè)置單元,用于根據(jù)所述元素的出隊(duì)優(yōu)先級(jí)中元素入隊(duì)時(shí)間和優(yōu)先級(jí)的權(quán)重設(shè)置所述加權(quán)值。還包括封裝模塊,用于對(duì)所述元素和所述元素的出隊(duì)優(yōu)先級(jí)進(jìn)行封裝。本發(fā)明不僅可以實(shí)現(xiàn)高優(yōu)先級(jí)元素的優(yōu)先取出,還可以避免低優(yōu)先級(jí)元素“餓死”。同時(shí),本發(fā)明僅需建立一個(gè)隊(duì)列,不需要根據(jù)元素優(yōu)先級(jí)設(shè)置多個(gè)列表或額外的進(jìn)程周期性地掃描、變更元素優(yōu)先級(jí),從而減少對(duì)系統(tǒng)資源的占用,提升系統(tǒng)效率。
圖1是本發(fā)明實(shí)施例1提供的一種元素出隊(duì)序列設(shè)置方法流程圖;圖2是本發(fā)明實(shí)施例2提供的一種元素出隊(duì)序列設(shè)置方法流程圖;圖3是本發(fā)明實(shí)施例3提供的一種元素出隊(duì)序列設(shè)置方法流程圖;圖4是本發(fā)明實(shí)施例4提供的一種元素出隊(duì)序列設(shè)置裝置示意圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。實(shí)施例1如圖1所示,本發(fā)明實(shí)施例提供了一種元素出隊(duì)序列設(shè)置方法,包括步驟101 根據(jù)元素入隊(duì)時(shí)間和優(yōu)先級(jí),計(jì)算該元素的出隊(duì)優(yōu)先級(jí);具體地,根據(jù)元素的入隊(duì)時(shí)間,設(shè)置該元素的時(shí)間戳,根據(jù)該元素的時(shí)間戳和優(yōu)先級(jí),計(jì)算出該元素的出隊(duì)優(yōu)先級(jí)。步驟102 根據(jù)元素的出隊(duì)優(yōu)先級(jí)進(jìn)行排序,從而得到元素出隊(duì)序列。其中,可以根據(jù)元素出隊(duì)序列,從隊(duì)列中取出元素。在本發(fā)明實(shí)施例中,根據(jù)元素的入隊(duì)時(shí)間和優(yōu)先級(jí),設(shè)置元素的出隊(duì)優(yōu)先級(jí),根據(jù)元素的出隊(duì)優(yōu)先級(jí)進(jìn)行排序,得到元素出隊(duì)序列。其中,當(dāng)元素出隊(duì)時(shí)可以根據(jù)元素出隊(duì)序列進(jìn)行出隊(duì),如此,只需要將所有的元素存放在同一個(gè)列表中,且不需要設(shè)置單獨(dú)的進(jìn)程掃描并增加每個(gè)元素的優(yōu)先級(jí),從而減少占用系統(tǒng)的資源。實(shí)施例2如圖2所示,本發(fā)明實(shí)施例提供了一種元素出隊(duì)序列設(shè)置方法,包括
步驟201 當(dāng)每個(gè)元素入隊(duì)時(shí),根據(jù)每個(gè)元素入隊(duì)時(shí)間為每個(gè)元素設(shè)置時(shí)間戳;具體地,當(dāng)每個(gè)元素入隊(duì)時(shí),獲取每個(gè)元素的入隊(duì)時(shí)間,根據(jù)每個(gè)元素的入隊(duì)時(shí)間和標(biāo)準(zhǔn)時(shí)間計(jì)算出時(shí)間差,設(shè)置該元素的時(shí)間戳為該時(shí)間差。其中,標(biāo)準(zhǔn)時(shí)間為事先設(shè)置的一個(gè)時(shí)間點(diǎn)??梢詫⒃摌?biāo)準(zhǔn)時(shí)間設(shè)置為格林威志標(biāo)準(zhǔn)時(shí)間。格林威志標(biāo)準(zhǔn)時(shí)間為1970年1月1日的00:00:00. 00。另外,時(shí)間戳的單位為毫
秒或秒。其中,當(dāng)每個(gè)元素入隊(duì)時(shí),隊(duì)列從系統(tǒng)函數(shù)庫(kù)中調(diào)用用于添加元素的Put函數(shù)的同時(shí),發(fā)送啟動(dòng)命令。在本實(shí)施例中,當(dāng)接收到隊(duì)列發(fā)送的啟動(dòng)命令時(shí),開(kāi)始執(zhí)行設(shè)置每個(gè)元素的時(shí)間戳的步驟。其中,在本實(shí)施例中,隊(duì)列為事先初始化的列表。每個(gè)元素還具有優(yōu)先級(jí)的屬性, 用戶在創(chuàng)建每個(gè)元素時(shí)并為每個(gè)元素設(shè)置優(yōu)先級(jí),因此,此時(shí)每個(gè)元素具有優(yōu)先級(jí)和時(shí)間戳兩個(gè)屬性。其中,在隊(duì)列中,時(shí)間戳越大的元素,表示該元素進(jìn)入隊(duì)列的時(shí)間越晚,在隊(duì)列中等待的時(shí)間越短,反之,時(shí)間戳越小的元素,表示該元素進(jìn)入隊(duì)列的時(shí)間越早,在隊(duì)列中等待的時(shí)間越長(zhǎng)。步驟202 根據(jù)每個(gè)元素的時(shí)間戳和優(yōu)先級(jí),計(jì)算每個(gè)元素的出隊(duì)優(yōu)先級(jí);具體地,根據(jù)每個(gè)元素的時(shí)間戳和優(yōu)先級(jí),按公式(1)計(jì)算每個(gè)元素的出隊(duì)優(yōu)先級(jí);OutSort = Timestamp-Priority氺Weight (1)其中,OutSort為元素的出隊(duì)優(yōu)先級(jí),Timestamp為元素的時(shí)間戳,Priority為元素的優(yōu)先級(jí),Weight為加權(quán)值,其值為事先設(shè)置的定值。例如,可以將加權(quán)值Weight的值設(shè)置為500或1000。其中,可以根據(jù)元素的出隊(duì)優(yōu)先級(jí)中元素入隊(duì)時(shí)間和優(yōu)先級(jí)的權(quán)重事先設(shè)置加權(quán)值的大小。其中,將元素的優(yōu)先級(jí)和加權(quán)值相乘,可以將元素的優(yōu)先級(jí)轉(zhuǎn)換為元素在隊(duì)列中的生存時(shí)間。在本實(shí)施例中,利用公式(1)可以用元素的生存時(shí)間換取出隊(duì)優(yōu)先級(jí)的降低, 不僅使得入隊(duì)時(shí)間相同的多個(gè)元素中優(yōu)先級(jí)越高的元素的出隊(duì)優(yōu)先級(jí)越小,還使得不同優(yōu)先級(jí)的多個(gè)元素可以根據(jù)入隊(duì)時(shí)間確定元素出隊(duì)優(yōu)先級(jí)。進(jìn)一步地,對(duì)每個(gè)元素和每個(gè)元素的出隊(duì)優(yōu)先級(jí)進(jìn)行封裝在一起。步驟203 根據(jù)每個(gè)元素的出隊(duì)優(yōu)先級(jí)進(jìn)行排序,得到元素出隊(duì)序列。具體地,根據(jù)每個(gè)元素的出隊(duì)優(yōu)先級(jí),按從小到大或從大到小的順序?qū)γ總€(gè)元素進(jìn)行排序,得到元素出隊(duì)序列。當(dāng)從隊(duì)列中取出元素時(shí),根據(jù)元素出隊(duì)序列取出元素,取出排序最前的元素。當(dāng)根據(jù)出隊(duì)優(yōu)先級(jí)從小到大的順序排序得到元素出隊(duì)序列時(shí),在從隊(duì)列中取出元素時(shí)將優(yōu)先取出出隊(duì)優(yōu)先級(jí)小的元素,可以使得入隊(duì)時(shí)間相同的多個(gè)元素中高優(yōu)先級(jí)的元素被優(yōu)先取出。從而實(shí)現(xiàn)高優(yōu)先級(jí)的元素,盡可能被優(yōu)先取出隊(duì)列。其中,每個(gè)元素的出隊(duì)優(yōu)先級(jí)根據(jù)每個(gè)元素的時(shí)間戳和優(yōu)先級(jí)計(jì)算獲得,因此每個(gè)元素的出隊(duì)優(yōu)先級(jí)都由入隊(duì)時(shí)間及元素優(yōu)先級(jí)共同決定。例如低優(yōu)先級(jí)的元素在隊(duì)列中等待的時(shí)間越長(zhǎng),即越早進(jìn)入隊(duì)列,其時(shí)間戳越小,而根據(jù)該元素的時(shí)間戳和優(yōu)先級(jí)計(jì)算獲得的出隊(duì)優(yōu)先級(jí)可能比后加入隊(duì)列的高優(yōu)先級(jí)元素的出隊(duì)優(yōu)先級(jí)?。欢邇?yōu)先級(jí)的元素在隊(duì)列中等待的時(shí)間越短,即越晚進(jìn)入隊(duì)列,其時(shí)間戳越大,根據(jù)該元素的時(shí)間戳和優(yōu)先級(jí)計(jì)算獲得的出隊(duì)優(yōu)先級(jí)可能比先加入隊(duì)列的低優(yōu)先級(jí)元素的出隊(duì)優(yōu)先級(jí)大。因此,低優(yōu)先級(jí)的元素會(huì)隨著等待的時(shí)間延長(zhǎng),將得到被優(yōu)先取出的機(jī)會(huì)。進(jìn)一步地,通過(guò)設(shè)置事先設(shè)置加權(quán)值的大小,可以決定出隊(duì)優(yōu)先級(jí)的計(jì)算過(guò)程中元素時(shí)間戳和優(yōu)先級(jí)的權(quán)重。例如加權(quán)值分別事先設(shè)置為500及1000,公式(1)根據(jù)前者計(jì)算獲得的出隊(duì)優(yōu)先級(jí)大于后者,即前者的計(jì)算過(guò)程中元素優(yōu)先級(jí)的權(quán)重低于后者。因此,當(dāng)加權(quán)值設(shè)置較小時(shí),出隊(duì)優(yōu)先級(jí)的計(jì)算過(guò)程中元素時(shí)間戳的影響較大;當(dāng)加權(quán)值設(shè)置較大時(shí),出隊(duì)優(yōu)先級(jí)的計(jì)算過(guò)程中元素優(yōu)先級(jí)的影響較大。在本發(fā)明的本實(shí)施例中,只需建立一個(gè)隊(duì)列用于存放進(jìn)入隊(duì)列的元素。當(dāng)每個(gè)元素進(jìn)入隊(duì)列時(shí),根據(jù)其入隊(duì)時(shí)間及元素優(yōu)先級(jí)計(jì)算每個(gè)元素的出隊(duì)優(yōu)先級(jí),再根據(jù)每個(gè)元素的出隊(duì)優(yōu)先級(jí)進(jìn)行排序,從而得到元素出隊(duì)序列。當(dāng)從隊(duì)列中取出元素時(shí),按元素出隊(duì)序列進(jìn)行取出元素。由此可知,本發(fā)明不僅可以實(shí)現(xiàn)高優(yōu)先級(jí)元素的優(yōu)先取出,還可以避免低優(yōu)先級(jí)元素“餓死”。同時(shí),本發(fā)明不需要根據(jù)元素優(yōu)先級(jí)設(shè)置多個(gè)列表或額外的進(jìn)程周期性地掃描、變更元素優(yōu)先級(jí),從而減少對(duì)系統(tǒng)資源的占用,提升系統(tǒng)效率。實(shí)施例3本發(fā)明實(shí)施例提供了一種元素出隊(duì)序列設(shè)置方法。為更好的理解本發(fā)明,在本實(shí)施例中僅以A、B和C三個(gè)元素舉例說(shuō)明其出隊(duì)優(yōu)先級(jí)的計(jì)算過(guò)程,并根據(jù)其出隊(duì)優(yōu)先級(jí)按從小到大的順序進(jìn)行排序,得到元素出隊(duì)序列。其中,元素A的優(yōu)先級(jí)為5,元素B的優(yōu)先級(jí)為6,元素C的優(yōu)先級(jí)為9。事先設(shè)置標(biāo)準(zhǔn)時(shí)間為格林威志時(shí)間以及生存時(shí)間加權(quán)值為500, 且時(shí)間戳的單位為毫秒。參見(jiàn)圖3,該方法包括步驟301 在當(dāng)前時(shí)間為1970-1-1的0時(shí)10分整時(shí),元素A進(jìn)入如表1所示的隊(duì)列,從系統(tǒng)中獲取元素A的入隊(duì)時(shí)間為該當(dāng)前時(shí)間;其中,事先初始化一個(gè)隊(duì)列,該隊(duì)列可以為一個(gè)列表。在本實(shí)施例中,在元素A進(jìn)入表1所示的隊(duì)列之前,表1所示的隊(duì)列為空的隊(duì)列。表 權(quán)利要求
1.一種元素出隊(duì)序列設(shè)置方法,其特征在于,所述方法包括 根據(jù)元素入隊(duì)時(shí)間和優(yōu)先級(jí),計(jì)算所述元素的出隊(duì)優(yōu)先級(jí);根據(jù)所述元素的出隊(duì)優(yōu)先級(jí)進(jìn)行排序,從而得到所述元素出隊(duì)序列。
2.如權(quán)利要求1所述的元素出隊(duì)序列設(shè)置方法,其特征在于,采用時(shí)間戳表示所述元素入隊(duì)時(shí)間,所述時(shí)間戳為元素入隊(duì)時(shí)間與標(biāo)準(zhǔn)時(shí)間的時(shí)間差。
3.如權(quán)利要求2所述的元素出隊(duì)序列設(shè)置方法,其特征在于,按如下公式計(jì)算所述元素的出隊(duì)優(yōu)先級(jí)OutSort = Timestamp-Priority氺Weight ;其中,OutSort為出隊(duì)優(yōu)先級(jí),Timestamp為時(shí)間戳,Priority為元素優(yōu)先級(jí),Weight 為加權(quán)值。
4.如權(quán)利要求3所述的元素出隊(duì)序列設(shè)置方法,其特征在于,根據(jù)所述元素的出隊(duì)優(yōu)先級(jí)中元素入隊(duì)時(shí)間和優(yōu)先級(jí)的權(quán)重設(shè)置所述加權(quán)值。
5.如權(quán)利要求1-4任一項(xiàng)權(quán)利要求所述的元素出隊(duì)序列設(shè)置方法,其特征在于,所述計(jì)算所述元素的出隊(duì)優(yōu)先級(jí)之后,還包括對(duì)所述元素和所述元素的出隊(duì)優(yōu)先級(jí)進(jìn)行封裝。
6.一種元素出隊(duì)序列設(shè)置裝置,其特征在于,所述裝置包括計(jì)算模塊,用于根據(jù)元素入隊(duì)時(shí)間和優(yōu)先級(jí),計(jì)算所述元素的出隊(duì)優(yōu)先級(jí); 排序模塊,用于根據(jù)所述元素的出隊(duì)優(yōu)先級(jí)進(jìn)行排序,從而得到所述元素出隊(duì)序列。
7.如權(quán)利要求6所述的元素出隊(duì)序列設(shè)置裝置,其特征在于,采用時(shí)間戳表示所述元素入隊(duì)時(shí)間,所述時(shí)間戳為元素入隊(duì)時(shí)間與標(biāo)準(zhǔn)時(shí)間的時(shí)間差。
8.如權(quán)利要求7所述的元素出隊(duì)序列設(shè)置裝置,其特征在于,所述計(jì)算模塊,具體用于按如下的公式計(jì)算出所述元素的出隊(duì)優(yōu)先級(jí); OutSort = Timestamp-Priority氺Weight ;其中,OutSort為出隊(duì)優(yōu)先級(jí),Timestamp為時(shí)間戳,Priority為元素的優(yōu)先級(jí),Weight 為加權(quán)值。
9.如權(quán)利要求8所述的元素出隊(duì)序列設(shè)置裝置,其特征在于,所述計(jì)算模塊還包括設(shè)置單元;所述設(shè)置單元,用于根據(jù)所述元素的出隊(duì)優(yōu)先級(jí)中元素入隊(duì)時(shí)間和優(yōu)先級(jí)的權(quán)重設(shè)置所述加權(quán)值。
10.如權(quán)利要求6-9任一項(xiàng)權(quán)利要求所述的元素出隊(duì)序列設(shè)置裝置,其特征在于,還包括封裝模塊,用于對(duì)所述元素和所述元素的出隊(duì)優(yōu)先級(jí)進(jìn)行封裝。
全文摘要
本發(fā)明公開(kāi)了一種元素出隊(duì)序列設(shè)置方法及裝置,屬于計(jì)算機(jī)領(lǐng)域。所述方法包括根據(jù)所述元素入隊(duì)時(shí)間和優(yōu)先級(jí),計(jì)算所述元素的出隊(duì)優(yōu)先級(jí);根據(jù)所述元素的出隊(duì)優(yōu)先級(jí)進(jìn)行排序,從而得到所述元素出隊(duì)序列。所述裝置包括計(jì)算模塊和排序模塊。本發(fā)明僅需建立一個(gè)隊(duì)列,不需要根據(jù)元素優(yōu)先級(jí)設(shè)置多個(gè)列表或額外的進(jìn)程周期性地掃描、變更元素優(yōu)先級(jí),從而減少對(duì)系統(tǒng)資源的占用,提升系統(tǒng)效率。
文檔編號(hào)G06F5/10GK102402416SQ201010282418
公開(kāi)日2012年4月4日 申請(qǐng)日期2010年9月10日 優(yōu)先權(quán)日2010年9月10日
發(fā)明者林育智 申請(qǐng)人:深圳市金蝶中間件有限公司