国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      實(shí)現(xiàn)多入多出隊(duì)列的方法和設(shè)備的制作方法

      文檔序號:6516746閱讀:231來源:國知局
      實(shí)現(xiàn)多入多出隊(duì)列的方法和設(shè)備的制作方法
      【專利摘要】本發(fā)明公開了一種實(shí)現(xiàn)多入多出隊(duì)列的方法和設(shè)備,屬于計(jì)算機(jī)應(yīng)用軟件【技術(shù)領(lǐng)域】,一種實(shí)現(xiàn)多入多出隊(duì)列的方法,包括以下步驟:S1.將隊(duì)列的存儲空間進(jìn)行分組,N個表項(xiàng)分為一組,N個表項(xiàng)中,第一個表項(xiàng)存儲這一組表項(xiàng)中有效的表項(xiàng)數(shù)目,有效值是0到(N-1),其余(N-1)個表項(xiàng)存儲生產(chǎn)者的數(shù)據(jù),其中N為大于等于1的整數(shù)。本發(fā)明的有益效果如下:提高了單位生產(chǎn)和消費(fèi)者問題的效率。最大限度的降低了多核環(huán)境下自旋鎖這一性能瓶頸對隊(duì)列操作的影響,提高了多核環(huán)境下的隊(duì)列性能,進(jìn)而提高了整個多核系統(tǒng)的性能。
      【專利說明】實(shí)現(xiàn)多入多出隊(duì)列的方法和設(shè)備
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及計(jì)算機(jī)應(yīng)用軟件【技術(shù)領(lǐng)域】,尤其涉及一種實(shí)現(xiàn)多入多出隊(duì)列的方法和設(shè)備。
      【背景技術(shù)】
      [0002]在系統(tǒng)軟件中,通常使用隊(duì)列作為不同模塊間共享數(shù)據(jù)的媒介。因此,隊(duì)列通常是被多個軟件模式使用的,不同的軟件模塊在使用隊(duì)列時都需要進(jìn)行互斥,以保證隊(duì)列的完整性。隨著多核技術(shù)的發(fā)展,多核系統(tǒng)中的核間通信通常也采用隊(duì)列技術(shù),因?yàn)殛?duì)列技術(shù)比較簡單高效,但是隨著多核系統(tǒng)中核數(shù)目的增多,隊(duì)列的訪問者也隨之增加,核與核之間都需要互斥的訪問隊(duì)列,但是多核系統(tǒng)中類似自旋鎖之類的互斥手段會隨著競爭的增加,效率會下降的非??欤罱K導(dǎo)致隊(duì)列的效率變得非常低。
      [0003]傳統(tǒng)的隊(duì)列技術(shù),如圖1所示,會使用一個隊(duì)列頭指針和隊(duì)列尾指針,頭指針用于入隊(duì)操作,尾指針用于出隊(duì)操作,在入隊(duì)操作時,判斷頭指針加I后是否和尾指針相等,如果相等,表明隊(duì)列已滿,不能入隊(duì),如果不相等,表明隊(duì)列未滿,可以入隊(duì),入隊(duì)后,頭指針加
      I。出隊(duì)操作判斷尾指針和頭指針是否相等,如果相等,表明隊(duì)列為空,不能出隊(duì),如果不相等,表明隊(duì)列有表項(xiàng),可以出隊(duì),出隊(duì)后,將尾指針加I。隊(duì)列在多核環(huán)境下使用時,由于存在多個核同時操作隊(duì)列,需要在入隊(duì)操作和出隊(duì)操作時添加鎖進(jìn)行互斥。
      [0004]傳統(tǒng)隊(duì)列技術(shù)的實(shí)現(xiàn)存在以下問題:為了在多核間互斥,所有操作都是鎖起來的。
      [0005]在多核系統(tǒng)中,由于競爭帶來的自旋鎖消耗會使自旋鎖效率嚴(yán)重降低,特別是隨著眾核(通常指含有8個以上CPU)的普及,核的數(shù)目增加后,這種效率成指數(shù)級下降。隊(duì)列技術(shù)是核間進(jìn)行通信的首要選擇,但是傳統(tǒng)的隊(duì)列技術(shù)由于需要自旋鎖作為保護(hù)手段,在多核環(huán)境下使用時,性能并不高,迫切需要設(shè)計(jì)一種新的隊(duì)列,在多核環(huán)境下保持高性能。要提聞隊(duì)列的性能,重點(diǎn)提聞的是自旋鎖的性能,而提聞自旋鎖的性能,重點(diǎn)在于減小自旋鎖的沖突概率,以及自旋鎖保護(hù)的范圍。
      [0006]在經(jīng)典的生產(chǎn)者消費(fèi)者環(huán)境中,如圖2所示,生產(chǎn)者向隊(duì)列中添加表項(xiàng),消費(fèi)者從隊(duì)列取出表項(xiàng)。生產(chǎn)者完成一個操作分為兩個部分,一個是完成生成流程(ptl),另一個是完成添加隊(duì)列的流程(Pt2)。多個生產(chǎn)者在pt2的過程中需要互斥的訪問隊(duì)列,這個操作會發(fā)生競爭隊(duì)列的情況。消費(fèi)者同理,也分為兩個流程,一個是從隊(duì)列中取表項(xiàng)(ctl),另一個是使用該表項(xiàng)(ct2)。多個消費(fèi)者會在ctl的時間段中互斥的訪問隊(duì)列。
      [0007]對于需要被多個模塊訪問的隊(duì)列,被共享訪問,就意味著競爭是必然存在的,而當(dāng)今的計(jì)算機(jī)架構(gòu),多核間的隨著競爭者的增加性能會急劇下降,大量的時間會消耗在獲取自旋鎖上,這個問題是計(jì)算機(jī)體系架構(gòu)決定的,無法改變。因此,為了提高在多核環(huán)境下隊(duì)列的性能,需要一種新的隊(duì)列,減小競爭帶來的額外開銷。

      【發(fā)明內(nèi)容】

      [0008]本發(fā)明的目的在于改善多核環(huán)境下計(jì)算機(jī)性能低下的現(xiàn)狀而提出的一種多入多出隊(duì)列的實(shí)現(xiàn)方法和設(shè)備。
      [0009]為了實(shí)現(xiàn)以上發(fā)明目的,本發(fā)明采取的技術(shù)方案如下:一種實(shí)現(xiàn)多入多出隊(duì)列的方法,包括以下步驟:
      [0010]S1.將隊(duì)列的存儲空間進(jìn)行分組,N個表項(xiàng)分為一組,N個表項(xiàng)中,第一個表項(xiàng)存儲這一組表項(xiàng)中有效的表項(xiàng)數(shù)目,有效值是O到(N-1),其余(N-1)個表項(xiàng)存儲生產(chǎn)者的數(shù)據(jù),其中N為大于等于I的整數(shù);
      [0011]S2.生產(chǎn)者和消費(fèi)者操作隊(duì)列的基本單位是一組N個表項(xiàng),當(dāng)生產(chǎn)者有M個表項(xiàng)要加入時,隊(duì)列也是分配一組N個表項(xiàng),其中M小于等于(N-1);入隊(duì)時,一次性將M個表項(xiàng)填入隊(duì)列,最后再將M填入到第一個表項(xiàng)中,表示表項(xiàng)填入完成;
      [0012]S3.出隊(duì)時,一次性從隊(duì)列中出隊(duì)一組N個表項(xiàng),首選從第一個表項(xiàng)中查看有效的表項(xiàng)個數(shù),在完成有效表項(xiàng)出隊(duì)之后,將隊(duì)列中的第一個表項(xiàng)清零,表示出隊(duì)完成。
      [0013]進(jìn)一步的,入隊(duì)時通過以下公式判斷隊(duì)列滿:頭指針+N=尾指針;如果相等,表明隊(duì)列已滿,不能入隊(duì),如果不相等,表明隊(duì)列未滿,可以入隊(duì),入隊(duì)后,頭指針加N。
      [0014]進(jìn)一步的,出隊(duì)時通過以下公式判斷隊(duì)列空:尾指針=頭指針;如果相等,表明隊(duì)列為空,不能出隊(duì),如果不相等,表明隊(duì)列有表項(xiàng),可以出隊(duì),出隊(duì)后,將尾指針加N。
      [0015]進(jìn)一步的,出隊(duì)和入隊(duì)時還需要通過每組表項(xiàng)中的表項(xiàng)個數(shù)判斷能否出隊(duì)或者入隊(duì)。
      [0016]進(jìn)一步的,入隊(duì)時,需要判斷下一組表項(xiàng)的表項(xiàng)個數(shù)是否為0,為O即可入隊(duì)。
      [0017]進(jìn)一步的,出隊(duì)時,需要判斷下一組表項(xiàng)的表項(xiàng)個數(shù)是否不為0,不為O即可出隊(duì)。
      [0018]進(jìn)一步的,所述的S2中,生產(chǎn)者和消費(fèi)者最多一次性進(jìn)行(N-1)次生產(chǎn)和消費(fèi)操作,然后批量入隊(duì)數(shù)據(jù)和批量出隊(duì)數(shù)據(jù)。
      [0019]為了解決上述問題,本發(fā)明還提出了一種實(shí)現(xiàn)多入多出隊(duì)列的設(shè)備,隊(duì)列的存儲空間至少包括一個分組,其中,N個表項(xiàng)為一組,N個表項(xiàng)中的第一個表項(xiàng)用于存儲這一組表項(xiàng)中有效的表項(xiàng)數(shù)目,有效值是O到(N-1),其余(N-1)個表項(xiàng)用于存儲生產(chǎn)者的數(shù)據(jù),其中N為大于等于I的整數(shù)。
      [0020]進(jìn)一步的,隊(duì)列存儲空間包括四個分組,每組有四個表項(xiàng)。
      [0021]進(jìn)一步的,所述的四個表項(xiàng)中第一個表項(xiàng)用于存儲這一組表項(xiàng)中有效的表項(xiàng)數(shù)目3,其余3個表項(xiàng)用于存儲生產(chǎn)者的數(shù)據(jù)。
      [0022]本發(fā)明的有益效果:本發(fā)明首先將隊(duì)列進(jìn)行分組改造,同時將第一個表項(xiàng)用于存儲分組有效數(shù)量以支持批量操作的需要,然后修改傳統(tǒng)隊(duì)列的入隊(duì)和出隊(duì)操作,將自旋鎖的保護(hù)僅僅限于頭部和尾部指針的移動,實(shí)現(xiàn)了自旋鎖保護(hù)的范圍和操作的表項(xiàng)完全無關(guān);最后生產(chǎn)者消費(fèi)者的流程在支持批量操作的隊(duì)列環(huán)境下,可以實(shí)現(xiàn)批量生產(chǎn)和批量消費(fèi),達(dá)到延長生產(chǎn)和消費(fèi)時間,減小同時競爭隊(duì)列的幾率,提高了隊(duì)列的性能,最終提高了單位生產(chǎn)和消費(fèi)者問題的效率,最大限度的降低了多核環(huán)境下自旋鎖這一性能瓶頸對隊(duì)列操作的影響,提高了多核環(huán)境下的隊(duì)列性能,進(jìn)而提高了整個多核系統(tǒng)的性能。
      【專利附圖】

      【附圖說明】
      [0023]圖1為傳統(tǒng)隊(duì)列存儲空間結(jié)構(gòu)示意圖;
      [0024]圖2為生產(chǎn)者消費(fèi)者環(huán)境中傳統(tǒng)隊(duì)列出隊(duì)入隊(duì)示意圖;[0025]圖3為本發(fā)明的隊(duì)列存儲空間結(jié)構(gòu)示意圖;
      [0026]圖4為本發(fā)明具體實(shí)施例1的隊(duì)列出隊(duì)入隊(duì)示意圖;
      [0027]圖5為本發(fā)明具體實(shí)施例2的隊(duì)列出隊(duì)入隊(duì)示意圖。
      【具體實(shí)施方式】
      [0028]為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對本發(fā)明做進(jìn)一步詳細(xì)說明。
      [0029]一種實(shí)現(xiàn)多入多出隊(duì)列的方法,包括以下步驟:
      [0030]S1.將隊(duì)列的存儲空間進(jìn)行分組,N個表項(xiàng)分為一組,N個表項(xiàng)中,第一個表項(xiàng)存儲這一組表項(xiàng)中有效的表項(xiàng)數(shù)目,有效值是O到(N-1),其余表項(xiàng)用于存儲生產(chǎn)者的數(shù)據(jù),其中N為大于等于I的整數(shù)。
      [0031]S2.生產(chǎn)者和消費(fèi)者操作隊(duì)列的基本單位是一組N個表項(xiàng),其中(N-1)用于保存生產(chǎn)者的數(shù)據(jù)。即使生產(chǎn)者只有M (M小于等于(N-1))個表項(xiàng)要加入,隊(duì)列也是分配一組N個表項(xiàng)。因此,生產(chǎn)者在生產(chǎn)階段最多可以連續(xù)進(jìn)行(N-1)次生產(chǎn)操作,產(chǎn)生多個表項(xiàng),時間為M*ptl。入隊(duì)時,一次性將M個表項(xiàng)填入隊(duì)列,最后再將M填入到第一個表項(xiàng)中(第一個表項(xiàng)表示有效的表項(xiàng)個數(shù)),以此表示表項(xiàng)填入完成。
      [0032]S3.出隊(duì)者一次性從隊(duì)列中出隊(duì)一組N個表項(xiàng),首選從第一個表項(xiàng)中查看有效的表項(xiàng)個數(shù),在完成有效表項(xiàng)出隊(duì)之后,將隊(duì)列中的第一個表項(xiàng)清零,表示出隊(duì)完成。
      [0033]相對于傳統(tǒng)隊(duì)列使用自旋鎖保護(hù)整個操作過程,本發(fā)明中,自旋鎖只保護(hù)頭(head)指針和尾(tail)指針的移動過程,對于表項(xiàng)的寫入和讀取不進(jìn)行保護(hù),而head和tail指針不是操作一個表項(xiàng)移動一次,而是一次性移動N個位置,只有一次操作,因此操作者持有自旋鎖的時間和操作的表項(xiàng)個數(shù)無關(guān),自旋鎖保護(hù)的范圍大大減小。
      [0034]當(dāng)有多個入隊(duì)和出隊(duì)者同時操作時,由于指針的移動是保護(hù)的,每個操作者獲得的可操作的區(qū)域是完全不同的,因此,入隊(duì)者和出隊(duì)者可以同時操作隊(duì)列而不受影響。
      [0035]傳統(tǒng)隊(duì)列判斷隊(duì)列空和隊(duì)列滿時,采用head+1 ==tai I判斷隊(duì)列滿,而本發(fā)明中,由于隊(duì)列時按組分配,因此需要采用head+N==tail判斷隊(duì)列滿。傳統(tǒng)隊(duì)列中采用tail==head判斷隊(duì)列空,在本發(fā)明中,仍然適用。
      [0036]由于指針的移動先于表項(xiàng)的寫入和讀取,就是說,head和tail指針已經(jīng)移動了,但是表項(xiàng)操作并沒有完成,因此,只通過head和tail指針判斷隊(duì)列狀態(tài)是不安全的。例如:入隊(duì)操作中,通過head和tail指針判斷隊(duì)列有空閑的空間可以加入新表項(xiàng),但是有可能當(dāng)前是出隊(duì)操作移動了 tail指針,但是表項(xiàng)正在處于讀出的過程中,還未完成,這時候入隊(duì)操作就有可能直接覆蓋了正在被出隊(duì)讀出的表項(xiàng)。因此,出隊(duì)和入隊(duì)都需要借助每組表項(xiàng)中的表項(xiàng)個數(shù)來進(jìn)行額外的判斷,入隊(duì)時,需要判斷下一組表項(xiàng)的表項(xiàng)個數(shù)是否為O (因?yàn)楸眄?xiàng)個數(shù)清零是出隊(duì)的最后一個操作)。出隊(duì)時,需要判斷下一組表項(xiàng)的表項(xiàng)個數(shù)是否不為O (因?yàn)橘x值表項(xiàng)個數(shù)是入隊(duì)的最后一個操作)。
      [0037]偽代碼:
      [0038][0039]
      【權(quán)利要求】
      1.一種實(shí)現(xiàn)多入多出隊(duì)列的方法,其特征在于,包括以下步驟: S1.將隊(duì)列的存儲空間進(jìn)行分組,N個表項(xiàng)分為一組,N個表項(xiàng)中,第一個表項(xiàng)存儲這一組表項(xiàng)中有效的表項(xiàng)數(shù)目,有效值是O到(N-I),其余(N-I)個表項(xiàng)存儲生產(chǎn)者的數(shù)據(jù),其中N為大于等于I的整數(shù); S2.生產(chǎn)者和消費(fèi)者操作隊(duì)列的基本單位是一組N個表項(xiàng),當(dāng)生產(chǎn)者有M個表項(xiàng)要加入時,隊(duì)列也是分配一組N個表項(xiàng),其中M小于等于(N-I);入隊(duì)時,一次性將M個表項(xiàng)填入隊(duì)列,最后再將M填入到第一個表項(xiàng)中,表示表項(xiàng)填入完成; S3.出隊(duì)時,一次性從隊(duì)列中出隊(duì)一組N個表項(xiàng),首選從第一個表項(xiàng)中查看有效的表項(xiàng)個數(shù),在完成有效表項(xiàng)出隊(duì)之后,將隊(duì)列中的第一個表項(xiàng)清零,表示出隊(duì)完成。
      2.根據(jù)權(quán)利要求I所述的方法,其特征在于,入隊(duì)時通過以下公式判斷隊(duì)列滿:頭指針+N=尾指針;如果相等,表明隊(duì)列已滿,不能入隊(duì),如果不相等,表明隊(duì)列未滿,可以入隊(duì),入隊(duì)后,頭指針加N。
      3.根據(jù)權(quán)利要求I或2所述的方法,其特征在于,出隊(duì)時通過以下公式判斷隊(duì)列空:尾指針=頭指針;如果相等,表明隊(duì)列為空,不能出隊(duì),如果不相等,表明隊(duì)列有表項(xiàng),可以出隊(duì),出隊(duì)后,將尾指針加N。
      4.根據(jù)權(quán)利要求3所述的方法,其特征在于,出隊(duì)和入隊(duì)時還需要通過每組表項(xiàng)中的表項(xiàng)個數(shù)判斷能否出隊(duì)或者入隊(duì)。
      5.根據(jù)權(quán)利要求4所述的方法,其特征在于:入隊(duì)時,需要判斷下一組表項(xiàng)的表項(xiàng)個數(shù)是否為O,為O即可入隊(duì)。
      6.根據(jù)權(quán)利要求5所述的方法,其特征在于:出隊(duì)時,需要判斷下一組表項(xiàng)的表項(xiàng)個數(shù)是否不為O,不為O即可出隊(duì)。
      7.根據(jù)權(quán)利要求I所述的方法,其特征在于:所述的S2中,生產(chǎn)者和消費(fèi)者最多一次性進(jìn)行(N-I)次生產(chǎn)和消費(fèi)操作,然后批量入隊(duì)數(shù)據(jù)和批量出隊(duì)數(shù)據(jù)。
      8.一種實(shí)現(xiàn)多入多出隊(duì)列的設(shè)備,其特征在于:隊(duì)列的存儲空間至少包括一個分組,其中,N個表項(xiàng)為一組,N個表項(xiàng)中的第一個表項(xiàng)用于存儲這一組表項(xiàng)中有效的表項(xiàng)數(shù)目,有效值是O到(N-I),其余(N-I)個表項(xiàng)用于存儲生產(chǎn)者的數(shù)據(jù),其中N為大于等于I的整數(shù)。
      9.根據(jù)權(quán)利要求8所述的設(shè)備,其特征在于:隊(duì)列存儲空間包括四個分組,每組有四個表項(xiàng)。
      10.根據(jù)權(quán)利要求9所述的設(shè)備,其特征在于:所述的四個表項(xiàng)中第一個表項(xiàng)用于存儲這一組表項(xiàng)中有效的表項(xiàng)數(shù)目3,其余3個表項(xiàng)用于存儲生產(chǎn)者的數(shù)據(jù)。
      【文檔編號】G06F9/44GK103530130SQ201310514533
      【公開日】2014年1月22日 申請日期:2013年10月28日 優(yōu)先權(quán)日:2013年10月28日
      【發(fā)明者】曾健 申請人:邁普通信技術(shù)股份有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1