国产精品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>

      一種并發(fā)數(shù)據(jù)的緩存方法及結(jié)構(gòu)的制作方法

      文檔序號:10552842閱讀:653來源:國知局
      一種并發(fā)數(shù)據(jù)的緩存方法及結(jié)構(gòu)的制作方法
      【專利摘要】一種并發(fā)數(shù)據(jù)的緩存方法,A每組數(shù)據(jù)寫入,A1監(jiān)測是否有寫鎖定狀態(tài)緩存分區(qū):若有轉(zhuǎn)入步驟A2?2;若無A2監(jiān)測是否存在空閑狀態(tài)緩存分區(qū):A21若有A21?1選定一組空閑狀態(tài)緩存分區(qū)置為寫鎖定狀態(tài);A21?2向緩存分區(qū)寫入數(shù)據(jù):A21?3判斷數(shù)據(jù)是否寫入成功:若成功,則該組數(shù)據(jù)寫入完成;若失敗,則將該緩存分區(qū)置為寫滿狀態(tài),轉(zhuǎn)入步驟A1;A22若無空閑狀態(tài)緩存分區(qū),結(jié)束數(shù)據(jù)寫入;步驟B數(shù)據(jù)讀取,B1實時監(jiān)測是否存在寫滿狀態(tài)下緩存分區(qū):若有B11選定該組緩存分區(qū)置為讀鎖定狀態(tài);B12讀取該緩存分區(qū)內(nèi)的緩存數(shù)據(jù),當(dāng)判斷緩存分區(qū)讀取完畢時,將其設(shè)為空閑狀態(tài),轉(zhuǎn)入步驟B1;若沒有,轉(zhuǎn)入步驟B1,繼續(xù)數(shù)據(jù)讀取,其對緩存分區(qū)訪問施加嚴(yán)格讀寫鎖,可有效優(yōu)化數(shù)據(jù)處理速率。
      【專利說明】
      一種并發(fā)數(shù)據(jù)的緩存方法及結(jié)構(gòu)
      技術(shù)領(lǐng)域
      [0001]本發(fā)明涉及輻射檢測領(lǐng)域的數(shù)據(jù)采集技術(shù),具體涉及一種高速數(shù)據(jù)采集的緩存方法和設(shè)備。
      【背景技術(shù)】
      [0002]現(xiàn)有技術(shù)中的高速數(shù)據(jù)采集系統(tǒng),其每個數(shù)據(jù)通道一般都對應(yīng)設(shè)有一個獨立的用于緩存通道數(shù)據(jù)的FIF0(First Input First Ouput,先入先出隊列),然而在實際的數(shù)據(jù)采集中,經(jīng)常遇到數(shù)據(jù)采集率高、速度快,而數(shù)據(jù)處理時間長,速度較慢的矛盾,當(dāng)緩存容量大時,這種原始數(shù)據(jù)的速率較高,對網(wǎng)絡(luò)接收和數(shù)據(jù)處理提出了較高的要求。
      [0003]以全數(shù)字PET為例,圖1為全數(shù)字PET設(shè)備中數(shù)據(jù)采集與處理流程示意圖,探測器各通道對接收到信號進行采樣和編碼,以特定格式的數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)。PET成像所需的有效事件分布于不同的探測器通道,兩者之間的匹配關(guān)系可通過事件采樣時間來標(biāo)定。來自各探測器通道的有效事件以及噪聲數(shù)據(jù)混合在一起,串行分布于網(wǎng)絡(luò)傳輸鏈路中,當(dāng)采集服務(wù)器接收到這些數(shù)據(jù)后,基于符合算法從中篩選出有效事件,并進行時間、能量校正,然后根據(jù)重建算法將篩選結(jié)果轉(zhuǎn)換為PET圖像。理想情況下數(shù)據(jù)采集應(yīng)與符合處理并發(fā)執(zhí)行,實時完成數(shù)據(jù)篩選、時間校正、能量校正,從而降低重建前數(shù)據(jù)存儲所需的資源要求。但是由于通道數(shù)量多,且每個通道中數(shù)據(jù)量十分巨大,每秒需要同時處理1.5GB至3GB的數(shù)據(jù),若無法及時進行處理,會導(dǎo)致有效事件的丟包,進而導(dǎo)致數(shù)據(jù)篩選、時間校正、能量校正的有效性降低,圖像重建無法實現(xiàn)或者雖然能實現(xiàn)但是嚴(yán)重影響精準(zhǔn)性。

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

      [0004]本發(fā)明的目的在于提供一種并發(fā)數(shù)據(jù)的緩存方法及結(jié)構(gòu),能夠有效解決數(shù)據(jù)采集率高、速度塊,而數(shù)據(jù)處理時間長、速度慢的問題,尤其適用于全數(shù)字PET中的探測器數(shù)據(jù)采集。
      [0005]為達到上述目的,本發(fā)明的解決方案是:
      [0006]本發(fā)明公開一種并發(fā)數(shù)據(jù)的緩存方法,包括以下步驟:緩存分區(qū)的工作狀態(tài)設(shè)置為空閑狀態(tài)、寫鎖定狀態(tài)、寫滿狀態(tài)以及讀鎖定狀態(tài)中的任意一種,
      [0007](A)每組數(shù)據(jù)寫入時,(Al)實時監(jiān)測是否存在寫鎖定狀態(tài)緩存分區(qū):若有寫鎖定狀態(tài)緩存分區(qū)直接轉(zhuǎn)入步驟(A2-2)進行該組數(shù)據(jù)寫入;若沒有寫鎖定狀態(tài)緩存分區(qū),(A2)實時監(jiān)測是否存在空閑狀態(tài)的緩存分區(qū):
      [0008](A21)若有處于空閑狀態(tài)的緩存分區(qū),(A21-1)選定一組空閑狀態(tài)的緩存分區(qū)置為寫鎖定狀態(tài);(A21-2)向所述寫鎖定狀態(tài)的緩存分區(qū)寫入該組數(shù)據(jù):(A21-3)判斷所述數(shù)據(jù)是否寫入成功:若寫入成功,則該組數(shù)據(jù)寫入完成,結(jié)束本次數(shù)據(jù)寫入;若寫入失敗,則將當(dāng)前緩存分區(qū)置為寫滿狀態(tài),并轉(zhuǎn)入步驟(Al)繼續(xù)該組數(shù)據(jù)的寫入;
      [0009](A22)若沒有處于空閑狀態(tài)的緩存分區(qū),則結(jié)束該組數(shù)據(jù)寫入;
      [0010]步驟(B)數(shù)據(jù)讀取時,(BI)實時監(jiān)測是否存在寫滿狀態(tài)下的緩存分區(qū):若有處于寫滿狀態(tài)下的緩存分區(qū),(Bll)選定該組寫滿狀態(tài)的緩存分區(qū)置為讀鎖定狀態(tài);(B12)讀取該讀鎖定狀態(tài)緩存分區(qū)內(nèi)的緩存數(shù)據(jù),當(dāng)判斷所述讀鎖定狀態(tài)緩存分區(qū)讀取完畢時,將所述緩存設(shè)置為空閑狀態(tài),同時轉(zhuǎn)入步驟(BI)繼續(xù)下一組緩存分區(qū)的讀取;若沒有寫滿狀態(tài)的緩存分區(qū),轉(zhuǎn)入步驟(BI),繼續(xù)數(shù)據(jù)的讀取。
      [0011]所述緩存分區(qū)中,同時只存在一組寫鎖定狀態(tài)緩存分區(qū)與一組讀鎖定狀態(tài)緩存分區(qū);
      [0012]優(yōu)選的,全部數(shù)據(jù)寫入進程結(jié)束時,若存在一組未寫滿的緩存分區(qū),則將該組緩存分區(qū)置為寫滿狀態(tài)以進行數(shù)據(jù)的讀取。
      [0013]依次順序訪問各緩存分區(qū)以監(jiān)測是否存在寫鎖定或空閑狀態(tài)的緩存分區(qū);
      [0014]優(yōu)選的,采取遍歷、與數(shù)據(jù)寫入訪問相同的順序、緩存分區(qū)寫入完成主動上報中的任一方式實時監(jiān)測是否存在寫滿狀態(tài)的緩存分區(qū);
      [0015]所述緩存分區(qū)內(nèi)部采用分級管理的方式進行數(shù)據(jù)寫入操作,所述緩存分區(qū)中包括多個大小相同的緩存扇區(qū),且所述緩存扇區(qū)一一編碼,且包括多個大小相同的緩存頁面,所述每組寫入數(shù)據(jù)的大小與所述緩存頁面大小相同設(shè)置,則所述步驟(A21-3)中,判斷所述數(shù)據(jù)是否寫入成功包括以下步驟:每組數(shù)據(jù)寫入緩存分區(qū)的每一緩存扇區(qū)后,緩存扇區(qū)內(nèi)部計數(shù),確定當(dāng)前緩存扇區(qū)編碼,比較所述緩存扇區(qū)編碼與所述緩存扇區(qū)的最大編碼數(shù)大小:若該緩存扇區(qū)編碼小于所述緩存分區(qū)的最大編碼數(shù),判斷下一組數(shù)據(jù)能夠在本緩存分區(qū)中寫入成功,若緩存扇區(qū)編碼等于所述緩存分區(qū)的最大編碼數(shù),則判斷所述緩存分區(qū)已滿,轉(zhuǎn)入步驟(Al),將下一組數(shù)據(jù)寫入下一個緩存分區(qū)中;
      [0016]優(yōu)選的,所述數(shù)據(jù)按照編碼順序?qū)懭胫了鼍彺嫔葏^(qū)中,且所述緩存頁面一一編碼,所述數(shù)據(jù)寫入至緩存扇區(qū)時,按照緩存頁面的編碼順序依次寫入。
      [0017]所述步驟(A21-3)中,所述數(shù)據(jù)寫入成功判斷包括以下步驟:向所述寫鎖定狀態(tài)的緩存分區(qū)寫入外部發(fā)送的數(shù)據(jù)組:當(dāng)判斷所述寫鎖定狀態(tài)緩存分區(qū)未寫滿時,寫入成功,繼續(xù)該組緩存分區(qū)的數(shù)據(jù)寫入;當(dāng)判斷所述寫鎖定狀態(tài)緩存分區(qū)寫滿或外部數(shù)據(jù)寫完畢時,將該組緩存分區(qū)置為寫滿狀態(tài),并轉(zhuǎn)入步驟(Al)繼續(xù)下一組外部數(shù)據(jù)的寫入;
      [0018]進一步的,所述寫鎖定狀態(tài)的緩存分區(qū)寫滿判斷包括以下步驟:向所述寫鎖定狀態(tài)的緩存分區(qū)寫入外部發(fā)送的數(shù)據(jù)時,比較外部數(shù)據(jù)量與所述寫鎖定狀態(tài)的緩存分區(qū)剩余空間大小,若外部數(shù)據(jù)的數(shù)量大于所述寫鎖定狀態(tài)的緩存分區(qū)剩余空間,判斷所述寫鎖定狀態(tài)的緩存分區(qū)寫滿;或,向所述寫鎖定狀態(tài)的緩存分區(qū)寫入外部發(fā)送的數(shù)據(jù)時,系統(tǒng)報錯,則判斷所述寫鎖定狀態(tài)的緩存分區(qū)寫滿。
      [0019]所述步驟(BI)之前,還包括實時監(jiān)測是否存在讀鎖定狀態(tài)緩存分區(qū)的步驟,若有,直接轉(zhuǎn)入步驟(B12)讀取所述讀鎖定狀態(tài)緩存分區(qū)內(nèi)的緩存數(shù)據(jù);若無,則轉(zhuǎn)入步驟(BI);
      [0020]優(yōu)選的,所述數(shù)據(jù)讀取速度大于數(shù)據(jù)寫入速度;
      [0021]優(yōu)選的,其應(yīng)有于生產(chǎn)者與消費者模型。
      [0022]本發(fā)明公開了一種并發(fā)數(shù)據(jù)的緩存結(jié)構(gòu),其同時進行數(shù)據(jù)的寫入與讀取,包括一組數(shù)據(jù)寫入線程、一組數(shù)據(jù)讀取線程、一組數(shù)據(jù)緩存模塊以及一分區(qū)控制模塊;
      [0023]所述數(shù)據(jù)緩存模塊包括多組緩存分區(qū);
      [0024]所述分區(qū)控制模塊與所述數(shù)據(jù)緩存模塊通信連接以控制所述多個緩存分區(qū)的工作狀態(tài)以及被訪問順序,所述分區(qū)控制模塊用于將所述每個緩存分區(qū)的工作狀態(tài)設(shè)置為空閑狀態(tài)、寫鎖定狀態(tài)、寫滿狀態(tài)以及讀鎖定狀態(tài)中的任意一種,僅當(dāng)所述緩存分區(qū)為空閑狀態(tài)時支持寫鎖定,且所述緩存分區(qū)處于寫鎖定狀態(tài)時支持?jǐn)?shù)據(jù)寫入,僅當(dāng)所述緩存分區(qū)為寫滿狀態(tài)時支持讀鎖定,且所述緩存分區(qū)處于讀鎖定狀態(tài)時支持?jǐn)?shù)據(jù)讀出;
      [0025]所述數(shù)據(jù)寫入線程與所述數(shù)據(jù)讀取線程分別經(jīng)由所述分區(qū)控制模塊與各緩存分區(qū)通信連接,所述分區(qū)控制模塊控制所述數(shù)據(jù)寫入線程與所述數(shù)據(jù)讀取線程訪問緩存分區(qū)的順序,以使得所述數(shù)據(jù)寫入線程與所述數(shù)據(jù)讀取線程根據(jù)所訪問緩存分區(qū)的工作狀態(tài)進行數(shù)據(jù)的寫入與讀取。
      [0026]所述每組緩存分區(qū)包括一控制單元以及多組緩存扇區(qū),所述緩存扇區(qū)一一編碼設(shè)置,所述控制單元與所述每組緩存扇區(qū)通信連接,以控制每組緩存分區(qū)中,數(shù)據(jù)寫入緩存扇區(qū)的順序;
      [0027]進一步優(yōu)選的,所述每組緩存扇區(qū)包括一控制組件以及多個緩存頁面,所述緩存頁面一一編碼且每組寫入數(shù)據(jù)的大小與緩存頁面相同設(shè)置,所述控制組件與所述緩存頁面分別通向連接,以控制每組緩存扇區(qū)中,數(shù)據(jù)寫入緩存頁碼的順序。
      [0028]所述分區(qū)控制模塊包括一寫鎖定判斷單元以及一讀鎖定判斷單元;
      [0029]所述寫鎖定判斷單元與數(shù)據(jù)緩存模塊通信連接,以控制數(shù)據(jù)緩存模塊中緩存分區(qū)的訪問順序、寫鎖定與去寫鎖定,所述數(shù)據(jù)寫入線程與所述寫鎖定判斷單元通信連接以根據(jù)所述寫鎖定判斷單元確定的訪問順序訪問的緩存分區(qū),并根據(jù)當(dāng)前訪問緩存分區(qū)的工作狀態(tài)進行數(shù)據(jù)的寫入操作;
      [0030]所述讀鎖定判斷單元與相應(yīng)的數(shù)據(jù)緩存模塊通信連接,以控制數(shù)據(jù)緩存模塊中緩存分區(qū)的訪問順序、讀鎖定與去讀鎖定,所述數(shù)據(jù)讀取線程與所述讀鎖定判斷單元通信連接以根據(jù)所訪問的緩存分區(qū)的當(dāng)前狀態(tài)判斷是否讀取緩存數(shù)據(jù)。
      [0031]優(yōu)選的,同時只存在一組寫鎖定狀態(tài)緩存分區(qū)與一組讀鎖定狀態(tài)緩存分區(qū)。
      [0032]優(yōu)選的,所述數(shù)據(jù)緩存模塊為生產(chǎn)者與消費者模型。
      [0033]此外,本發(fā)明還公開了一種并發(fā)數(shù)據(jù)的緩存模型,同時包括至少兩組以上如權(quán)利要求8所述并發(fā)數(shù)據(jù)的緩存結(jié)構(gòu)。
      [0034]由于采用上述方案,本發(fā)明的有益效果是:本發(fā)明所示的簡單的并發(fā)數(shù)據(jù)緩存方法及結(jié)構(gòu),通過為對緩存分區(qū)的訪問施加嚴(yán)格的讀寫鎖,可支持更高的網(wǎng)絡(luò)數(shù)據(jù)速率,優(yōu)化數(shù)據(jù)處理速度。
      【附圖說明】
      [0035]圖1為全數(shù)字PET的數(shù)據(jù)采集與處理流程示意圖;
      [0036]圖2為本發(fā)明一實施例中并發(fā)數(shù)據(jù)緩存方法步驟示意圖;
      [0037]圖3為圖2所示實施例中并發(fā)數(shù)據(jù)緩存方法數(shù)據(jù)寫入時的流程圖;
      [0038]圖4為圖2所示實施例中并發(fā)數(shù)據(jù)緩存方法數(shù)據(jù)讀取時的流程圖;
      [0039]圖5為本法一實施例中并發(fā)數(shù)據(jù)緩存結(jié)構(gòu)示意圖;
      [0040]圖6為圖5所不實施例中緩存扇區(qū)的結(jié)構(gòu)不意圖。
      【具體實施方式】
      [0041 ]以下結(jié)合附圖所示實施例對本發(fā)明作進一步的說明。
      [0042]本發(fā)明提供了一種并發(fā)數(shù)據(jù)的緩存方法,包括以下步驟,緩存分區(qū)的工作狀態(tài)設(shè)置為空閑狀態(tài)、寫鎖定狀態(tài)、寫滿狀態(tài)以及讀鎖定狀態(tài)中的任意一種,其中當(dāng)某一緩存分區(qū)全部寫滿或某一時間段內(nèi)外部數(shù)據(jù)寫入完畢,沒有新的數(shù)據(jù)寫入時,該緩存分區(qū)被置為寫滿狀態(tài)。
      [0043]由于無法確定外部數(shù)據(jù)的發(fā)送時間以及數(shù)量的大小,為了確保每組外部發(fā)送的數(shù)據(jù)能夠及時有效的寫入至緩存中,盡量避免出現(xiàn)丟包的問題,如圖3所示,每組數(shù)據(jù)寫入過程如下,(A)—組數(shù)據(jù)寫入:(Al)實時監(jiān)測是否存在寫鎖定狀態(tài)緩存分區(qū):當(dāng)確定存在寫鎖定狀態(tài)緩存分區(qū)時,直接轉(zhuǎn)入步驟(A2-2),將該組數(shù)據(jù)寫入至寫鎖定狀態(tài)緩存分區(qū)中。若當(dāng)前緩存分區(qū)中沒有處于寫鎖定的工作狀態(tài)時,(A2)則實時監(jiān)測是否存在空閑狀態(tài)的緩存分區(qū):(A21)若有處于空閑狀態(tài)的緩存分區(qū),(A21-1)選定一組空閑狀態(tài)的緩存分區(qū)置為寫鎖定狀態(tài);(A21-2)向所述寫鎖定狀態(tài)的緩存分區(qū)寫入該組數(shù)據(jù):(A21-3)判斷所述數(shù)據(jù)是否寫入成功:若數(shù)據(jù)寫入成功,則該組數(shù)據(jù)寫入完成,結(jié)束該組數(shù)據(jù)的寫入,同時可轉(zhuǎn)入步驟(A)中繼續(xù)下一組數(shù)據(jù)的寫入;若數(shù)據(jù)寫入失敗,則說明當(dāng)前處于寫鎖定工作狀態(tài)的緩存分區(qū)已經(jīng)寫滿了,無法在進行新的數(shù)據(jù)寫入,則將當(dāng)前緩存分區(qū)的工作狀態(tài)置為寫滿狀態(tài),同時轉(zhuǎn)入步驟(Al)中,繼續(xù)該組外部數(shù)據(jù)的寫入,將該組外部數(shù)據(jù)寫入至其他緩存分區(qū)中;
      [0044]其中,上述步驟(A21-3)中,可通過判斷選定的寫鎖定狀態(tài)緩存分區(qū)是否寫滿的步驟來確定數(shù)據(jù)是否寫入成功。在向?qū)戞i定狀態(tài)的緩存分區(qū)寫入外部發(fā)送的數(shù)據(jù)組時,若判斷寫鎖定狀態(tài)緩存分區(qū)還未寫滿時,則說明有足夠的空間寫入當(dāng)前數(shù)據(jù),則當(dāng)該組數(shù)據(jù)寫入時可判斷其寫入成功;當(dāng)判斷選定的寫鎖定狀態(tài)緩存分區(qū)已寫滿時,沒有足夠的空間繼續(xù)寫入新的數(shù)據(jù),則說明無法將該組數(shù)據(jù)寫入至上述寫鎖定狀態(tài)緩存分區(qū),判斷其寫入失敗,此時,需將該組緩存分區(qū)置為寫滿狀態(tài),并轉(zhuǎn)入步驟(Al),以將本組數(shù)據(jù)寫入至其他合適的緩存分區(qū)中。
      [0045]上述寫鎖定狀態(tài)的緩存分區(qū)寫滿判斷具體又包括以下步驟:向?qū)戞i定狀態(tài)的緩存分區(qū)寫入外部發(fā)送的數(shù)據(jù)時,首先比較該組數(shù)據(jù)與寫鎖定狀態(tài)的緩存分區(qū)剩余空間大小,若外部數(shù)據(jù)大于寫鎖定狀態(tài)的緩存分區(qū)剩余空間,則判斷寫鎖定狀態(tài)的緩存分區(qū)寫滿;若外部數(shù)據(jù)不大于寫鎖定狀態(tài)的緩存分區(qū)剩余空間,則判斷寫鎖定狀態(tài)的緩存分區(qū)未寫滿,本組數(shù)據(jù)可繼續(xù)寫入;也可采取主動上報的方式判斷寫鎖定狀態(tài)的緩存分區(qū)是否寫滿,即當(dāng)向?qū)戞i定狀態(tài)的緩存分區(qū)寫入外部發(fā)送的數(shù)據(jù)時,若系統(tǒng)主動報錯,則判斷寫鎖定狀態(tài)的緩存分區(qū)寫滿。
      [0046](A22)若沒有處于空閑狀態(tài)的緩存分區(qū),說明當(dāng)前緩存已經(jīng)全部寫滿,則結(jié)束該組數(shù)據(jù)的寫入進程。
      [0047]數(shù)據(jù)讀取包括以下步驟,(B)數(shù)據(jù)讀取時,以單個緩存分區(qū)為基礎(chǔ)來進行的,(BI)實時監(jiān)測是否存在寫滿狀態(tài)下的緩存分區(qū):若有處于寫滿狀態(tài)下的緩存分區(qū),(Bll)選定其中一組寫滿狀態(tài)的緩存分區(qū)置為讀鎖定狀態(tài);(B12)讀取該讀鎖定狀態(tài)緩存分區(qū)內(nèi)的緩存數(shù)據(jù),當(dāng)判斷所述讀鎖定狀態(tài)緩存分區(qū)讀取完畢時,將所述緩存設(shè)置為空閑狀態(tài),同時轉(zhuǎn)入步驟(BI)繼續(xù)下一組緩存分區(qū)的讀取;若沒有寫滿狀態(tài)的緩存分區(qū),則轉(zhuǎn)入步驟(BI)中,判斷下一時刻是否存在寫滿狀態(tài)緩存分區(qū)以繼續(xù)進行數(shù)據(jù)的讀取。
      [0048]此外,全部數(shù)據(jù)寫入進程結(jié)束時,若存在一組未寫滿的緩存分區(qū),則將該組緩存分區(qū)置為寫滿狀態(tài)以進行數(shù)據(jù)的讀取??紤]到外部數(shù)據(jù)的大小無法確定,某一時間段內(nèi)數(shù)據(jù)寫入進程結(jié)束時,所接收的外部數(shù)據(jù)可能無法寫滿一組數(shù)據(jù)緩存,或者最后一段數(shù)據(jù)無法寫滿一組數(shù)據(jù)緩存,此時為了讀取該部分?jǐn)?shù)據(jù),將寫入該部分?jǐn)?shù)據(jù)的緩存分區(qū)也置為寫滿狀態(tài)。
      [0049]所述步驟(BI)之前,還包括實時監(jiān)測是否存在讀鎖定狀態(tài)緩存分區(qū)的步驟,若有,直接轉(zhuǎn)入步驟(B12)讀取選定讀鎖定狀態(tài)緩存分區(qū)內(nèi)的緩存數(shù)據(jù);若無,則轉(zhuǎn)入步驟(BI),判斷是否存在寫滿狀態(tài)下的緩存分區(qū)以繼續(xù)數(shù)據(jù)的讀取。
      [0050]為了便于數(shù)據(jù)寫入與讀取的管理,在所有的緩存分區(qū)中,同時只設(shè)置一組寫鎖定狀態(tài)緩存分區(qū)與一組讀鎖定狀態(tài)緩存分區(qū),即緩存中同時只進行一組緩存分區(qū)的數(shù)據(jù)寫入和/或一組緩存分區(qū)的數(shù)據(jù)讀取,這樣設(shè)置,一方面可使得數(shù)據(jù)的寫入與讀取更為有序,只有一組緩存分區(qū)寫完或讀完之后,才能對下一分區(qū)進行讀寫操作,另一方面,也可充分利用緩存分區(qū)的空間,保證每組緩存分區(qū)都得到有效利用,而不會出現(xiàn)多組緩存分區(qū)只有一部分空間被利用的情形。
      [0051]在上述基礎(chǔ)上,本發(fā)明所示的緩存方法對緩存分區(qū)的訪問順序進行設(shè)置,以更好的實現(xiàn)數(shù)據(jù)寫入與讀取的合理管理。
      [0052]數(shù)據(jù)寫入過程中,依次順序訪問各緩存分區(qū)以監(jiān)測是否存在寫鎖定或空閑狀態(tài)的緩存分區(qū),即寫入線程在尋找寫鎖定或空閑狀態(tài)的緩存分區(qū)時,任意設(shè)置一緩存分區(qū)作為起點,然后按照順序循環(huán)依次訪問,具體而言,各緩存分區(qū)構(gòu)建和初始化完成后一般即為空閑狀態(tài),由于同時只存在一組寫鎖定狀態(tài)的緩存分區(qū),在進行數(shù)據(jù)寫入時,寫入線程按照從起始點開始的順序依次訪問各緩存分區(qū),首先起始點的空閑狀態(tài)緩存分別被置為寫鎖定狀態(tài)以進行數(shù)據(jù)寫入,當(dāng)起始點的緩存分區(qū)寫滿后,起始點的下一緩存分區(qū)被置為寫鎖定狀態(tài),寫入線程直接轉(zhuǎn)入下一緩存分區(qū)繼續(xù)數(shù)據(jù)的寫入,直至該緩存分區(qū)寫滿,依次循環(huán)實現(xiàn)數(shù)據(jù)的寫入。
      [0053]由于數(shù)據(jù)寫入的時間以及寫入量是人為無法控制的,為了更好的應(yīng)對各種突發(fā)的數(shù)據(jù)寫入情況,更進一步的,緩存分區(qū)中包括多個大小相同的緩存扇區(qū),緩存扇區(qū)一一編碼且包括多個大小相同的緩存頁面,將每組寫入數(shù)據(jù)的大小與緩存頁面大小相同設(shè)置。當(dāng)確定一組寫鎖定狀態(tài)下的緩存分區(qū)進行數(shù)據(jù)寫入時,將本組數(shù)據(jù)按照順序?qū)懭敫骶彺嫔葏^(qū)的緩存頁面中,即首先本組數(shù)據(jù)寫入第一組緩存扇區(qū)的第一個緩存頁面中,下一組數(shù)據(jù)寫入第一組緩存扇區(qū)的第二個緩存頁面中,依次進行,直至該組緩存扇區(qū)寫滿,則緩存扇區(qū)內(nèi)部自己計數(shù),確定當(dāng)前緩存扇區(qū)編碼,并自動將未寫完的數(shù)據(jù)或者下一組數(shù)據(jù)寫入至第二組緩存分區(qū)(下一緩存扇區(qū))的第一個緩存頁面中,直至該緩存分區(qū)中所有的緩存頁面均被寫滿。相應(yīng)的數(shù)據(jù)寫入時緩存分區(qū)寫滿判斷的步驟如下:比較緩存扇區(qū)編碼與緩存扇區(qū)的最大編碼數(shù)大小:若該緩存扇區(qū)編碼小于緩存分區(qū)的最大編碼數(shù),判斷下一組數(shù)據(jù)能夠在本緩存分區(qū)中寫入成功,若緩存扇區(qū)編碼等于緩存分區(qū)的最大編碼數(shù),則判斷緩存分區(qū)已滿,轉(zhuǎn)入步驟(Al ),將下一組數(shù)據(jù)寫入下一個緩存分區(qū)中。
      [0054]在進行數(shù)據(jù)讀取時,可采用與數(shù)據(jù)寫入訪問相同的順序的進行數(shù)據(jù)的讀出,從而當(dāng)緩存分區(qū)寫滿并置為寫滿狀態(tài)后,數(shù)據(jù)讀取線程能在第一時間內(nèi)訪問該緩存分區(qū),進而該緩存分區(qū)被置為讀鎖定狀態(tài)并進行數(shù)據(jù)的讀取,這樣設(shè)置,可盡量節(jié)約時間,提高數(shù)據(jù)的讀出效率。同時,也可采取遍歷、緩存分區(qū)寫滿主動上報等方式實時監(jiān)測是否存在寫滿狀態(tài)的緩存分區(qū),從進行數(shù)據(jù)的讀出。
      [0055]此外,考慮到若出現(xiàn)外部數(shù)據(jù)量較大,緩存空間存儲能力有限的,可能導(dǎo)致數(shù)據(jù)丟失的情形,故本發(fā)明所示的緩存方法中,數(shù)據(jù)讀取速度大于數(shù)據(jù)寫入速度設(shè)置。
      [0056]以下以本發(fā)明所示的緩存方法應(yīng)用于基本緩存模型(即單個生產(chǎn)者和單個消費者的場景)對其工作過程進行進一步的說明。將整個緩存分為若干個緩存分區(qū),通過簡單的狀態(tài)鎖來實現(xiàn)生產(chǎn)者與消費者對緩存分區(qū)的訪問保護。各緩存分區(qū)構(gòu)建和初始化完成后即為空閑狀態(tài)。在將數(shù)據(jù)寫入緩存分區(qū)之前,首先實時判斷是否存在空閑狀態(tài)的緩存分區(qū),如果存在則進行數(shù)據(jù)寫入操作,將該緩存分區(qū)狀態(tài)置為寫鎖定狀態(tài),僅當(dāng)緩存分區(qū)為空閑狀態(tài)時支持寫鎖定,并通過數(shù)據(jù)寫入線程進行該組緩存分區(qū)的數(shù)據(jù)寫入。當(dāng)判斷該緩存分區(qū)寫滿后,一方面將該緩存分區(qū)置為可讀狀態(tài)(即寫滿且未鎖定狀態(tài)),另一方面尋找緩存內(nèi)其他的空閑分區(qū),循環(huán)繼續(xù)數(shù)據(jù)寫入操作。在進行數(shù)據(jù)寫入操作的同時,數(shù)據(jù)讀取線程也在訪問緩存分區(qū)進行數(shù)據(jù)讀取操作,數(shù)據(jù)讀取線程實時訪問各緩存分區(qū)以判斷是否存在可讀狀態(tài)緩存分區(qū),當(dāng)數(shù)據(jù)讀取線程判斷當(dāng)前訪問的緩存分區(qū)變?yōu)榭勺x狀態(tài)時,在數(shù)據(jù)讀取線程從緩存分區(qū)讀取數(shù)據(jù)之前,首先需要將該分區(qū)狀態(tài)置為讀鎖定狀態(tài),僅當(dāng)緩存分區(qū)為可讀狀態(tài)時支持讀鎖定。若試圖對緩存分區(qū)添加讀鎖定或?qū)戞i定而操作失敗,意味著網(wǎng)絡(luò)接收線程和數(shù)據(jù)處理線程訪問位置發(fā)生交匯,若為寫鎖定相關(guān)操作失敗則表示緩存已滿。
      [0057]本發(fā)明所示的并發(fā)數(shù)據(jù)的緩存方法也可用于由多個基本緩存模型組成的緩存中,具體步驟如前所述,每基本緩存模型均采取并發(fā)數(shù)據(jù)的緩存方法進行數(shù)據(jù)的寫入與讀出,此處不再贅述。
      [0058]當(dāng)該方法應(yīng)用于PET設(shè)備中的數(shù)據(jù)采集實現(xiàn)時,NETTY網(wǎng)絡(luò)框架定義了獨立的數(shù)據(jù)接收線程充當(dāng)生產(chǎn)者。由定制的工作線程充當(dāng)消費者,負(fù)責(zé)網(wǎng)絡(luò)數(shù)據(jù)包解析、事件符合計算等處理。緩存分區(qū)的訪問鎖基于JAVA開發(fā)環(huán)境提供的CAS機制實現(xiàn),其基本原理是將緩存分區(qū)的狀態(tài)設(shè)定實現(xiàn)為原子性操作。具體來說,訪問鎖對象的訪問是一個原子性操作。一個操作是原子的,則這個操作的更高層不能發(fā)現(xiàn)其內(nèi)部實現(xiàn)與結(jié)構(gòu)。原子操作可以是一個步驟,也可以是多個步驟,其順序是不可以被打亂的,也不能被分割只執(zhí)行部分。CAS是指CompareandSet,即檢查對象的值,如果滿足某種條件,則將此對象設(shè)置為新值。使用CAS機制可實現(xiàn)不使用線程鎖的方式對對象的值進行訪問和更新,性能優(yōu)于使用互斥鎖的方案。
      [0059]單個緩存分區(qū)作為事件篩選樣本的基本集合單元,其容量可靈活配置,以便于調(diào)整因數(shù)據(jù)分片而引起的符合事件丟失率。為優(yōu)化數(shù)據(jù)處理速度,網(wǎng)絡(luò)數(shù)據(jù)包解析和符合篩選環(huán)節(jié)均引入了 JAVA開發(fā)環(huán)境提供的Fork/Join并行計算模型。每個緩存分區(qū)的容量是相同,其容量大小可靈活配置。理論上緩存分區(qū)越大越好,這樣可以保證數(shù)據(jù)丟失少,但緩存分區(qū)越大對物理內(nèi)存的要求也就越高。故這個緩存分區(qū)容量大小值可根據(jù)物理內(nèi)存的大小來確定。Fork/Join并行計算模型的原理是Map/Reduce模型,對一個復(fù)雜的任務(wù)進行分而治之,通過使用現(xiàn)在計算機多核多線程技術(shù)提高計算效率。例如計算N個數(shù)的和,將N個數(shù)分為M份,并使用M個線程同步執(zhí)行計算的任務(wù),再將M個結(jié)果合并成一個結(jié)果。
      [0060]本發(fā)明還公開了一種并發(fā)數(shù)據(jù)的緩存結(jié)構(gòu),同時進行數(shù)據(jù)的寫入與讀取,包括一組數(shù)據(jù)寫入線程100、一組數(shù)據(jù)讀取線程200、一組數(shù)據(jù)緩存模塊300以及一分區(qū)控制模塊400。
      [0061 ]數(shù)據(jù)緩存模塊300包括多組緩存分區(qū)310,分區(qū)控制模塊400與數(shù)據(jù)緩存模塊300通信連接,用于控制數(shù)據(jù)緩存模塊300中各個緩存分區(qū)310的工作狀態(tài),即分區(qū)控制模塊400將每個緩存分區(qū)310的工作狀態(tài)設(shè)置為空閑狀態(tài)、寫鎖定狀態(tài)、寫滿狀態(tài)以及讀鎖定狀態(tài)中的任意一種。僅當(dāng)緩存分區(qū)310為空閑狀態(tài)時支持寫鎖定,且當(dāng)緩存分區(qū)310的工作狀態(tài)為寫鎖定時支持?jǐn)?shù)據(jù)寫入線程100進行數(shù)據(jù)的寫入;僅當(dāng)緩存分區(qū)310為寫滿狀態(tài)時支持讀鎖定,且當(dāng)緩存分區(qū)310的工作狀態(tài)為讀鎖定狀態(tài)時支持?jǐn)?shù)據(jù)讀取線程200進行數(shù)據(jù)的讀出,同時分區(qū)控制模塊400還用于控制各個緩存分區(qū)310的被訪問順序,數(shù)據(jù)寫入線程100與數(shù)據(jù)讀取線程200分別經(jīng)由分區(qū)控制模塊400與各緩存分區(qū)310通信連接,數(shù)據(jù)寫入線程100與數(shù)據(jù)讀取線程200按照分區(qū)控制模塊400確定的訪問順序分別訪問數(shù)據(jù)緩存模塊300中的多組緩存分區(qū),然后根據(jù)其所訪問緩存分區(qū)的狀態(tài)來進行數(shù)據(jù)的寫入或者讀取操作。
      [0062]為了便于數(shù)據(jù)的寫入與讀取,分區(qū)控制模塊400將讀寫操作分開進行,其包括一寫鎖定判斷單元410以及一讀鎖定判斷單元420,且在所有的緩存分區(qū)中,同時只設(shè)置一組寫鎖定狀態(tài)緩存分區(qū)與一組讀鎖定狀態(tài)緩存分區(qū)。
      [0063]寫鎖定判斷單元410與數(shù)據(jù)緩存模塊300通信連接,用于控制數(shù)據(jù)緩存模塊300中緩存分區(qū)310的訪問順序、寫鎖定(將空閑狀態(tài)的緩存分區(qū)置為寫鎖定狀態(tài))與去寫鎖定(將寫滿的寫鎖定狀態(tài)緩存分區(qū)置為寫滿狀態(tài))。數(shù)據(jù)寫入線程100與寫鎖定判斷單元410通信連接,其根據(jù)寫鎖定判斷單元410確定的訪問順序來訪問各緩存分區(qū)310,并根據(jù)當(dāng)前所訪問緩存分區(qū)310的工作狀態(tài)進行數(shù)據(jù)的寫入操作。在其中一實施例中,為了使得各緩存分區(qū)的數(shù)據(jù)輸入相對均衡,寫鎖定判斷單元410采用定制遍歷策略來調(diào)節(jié)數(shù)據(jù)在緩存模塊中的分布,即順序遍歷,可任意選取其中一組緩存分區(qū)作為起始點并按照編碼順序?qū)彺娣謪^(qū)進行控制。緩存構(gòu)建完成后,一般情況下,各緩存分區(qū)均為空閑狀態(tài),寫鎖定判斷單元410將處于起始點的空閑狀態(tài)的緩存分區(qū)置為寫鎖定狀態(tài),數(shù)據(jù)寫入線程100按照寫鎖定判斷單元410確定的訪問順序訪問起始點的緩存分區(qū),由于其為寫鎖定狀態(tài),則可開始進行數(shù)據(jù)寫入,待該緩存分區(qū)寫滿以后,寫鎖定判斷單元410將起始點的緩存分區(qū)置為寫滿狀態(tài),并將起始點下一編碼處的空閑狀態(tài)緩存分區(qū)置為寫鎖定狀態(tài),數(shù)據(jù)寫入線程100按照寫鎖定判斷單元410確定的繼續(xù)訪問下一編碼緩存分區(qū),然后進行數(shù)據(jù)寫入操作。
      [0064]讀鎖定判斷單元420與相應(yīng)的數(shù)據(jù)緩存模塊300也通信連接,用于控制數(shù)據(jù)緩存模塊300中緩存分區(qū)的訪問順序、讀鎖定(將寫滿狀態(tài)的緩存分區(qū)置為讀鎖定狀態(tài))與去讀鎖定(將讀取完畢的緩存分區(qū)置為空閑狀態(tài)),數(shù)據(jù)讀取線程200與讀鎖定判斷單元420通信連接以根據(jù)所訪問的緩存分區(qū)的當(dāng)前狀態(tài)判斷是否讀取緩存數(shù)據(jù)。在數(shù)據(jù)寫入的同時,數(shù)據(jù)讀取線程200也在進行數(shù)據(jù)的讀取操作,數(shù)據(jù)讀取的訪問順序可采用與數(shù)據(jù)寫入訪問相同的順序的進行數(shù)據(jù)的讀出,即讀鎖定判斷單元420控制數(shù)據(jù)讀取線程200按照寫鎖定判斷單元410所確定的訪問順序,來訪問各緩存分區(qū),這樣設(shè)置,當(dāng)緩存分區(qū)寫滿并置為寫滿狀態(tài)后,數(shù)據(jù)讀取線程200能在第一時間內(nèi)訪問該緩存分區(qū),進而該緩存分區(qū)被置為讀鎖定狀態(tài)并進行數(shù)據(jù)的讀取,能夠更進一步的提高數(shù)據(jù)的讀出效率。此外,讀鎖定判斷單元420也可采取遍歷順序,或者由各緩存分區(qū)寫滿主動上報,讀鎖定判斷單元420以及緩存分區(qū)上報的順序確定數(shù)據(jù)讀取線程200的訪問順序。
      [0065]由于數(shù)據(jù)寫入的過程是人為無法控制的過程,可能出現(xiàn)在上述設(shè)置的基礎(chǔ)上,為了有效的進行數(shù)據(jù)的寫入管理,減少數(shù)據(jù)丟包事件的發(fā)生,同時提高緩存的利用率,每組緩存分區(qū)310分層級管理設(shè)置,其包括一控制單元311以及多組緩存扇區(qū)312,緩存扇區(qū)312—一編碼設(shè)置,控制單元311與該組緩存分區(qū)310中的所有緩存扇區(qū)312通信連接,用于控制每組緩存分區(qū)中,外部數(shù)據(jù)寫入緩存扇區(qū)312的順序。進一步的,每組緩存扇區(qū)312包括一控制組件312-1以及多個緩存頁面312-2,緩存頁面312-2—一編碼且每組寫入數(shù)據(jù)的大小與緩存頁面312-2相同設(shè)置,控制組件312-1與緩存頁面312-2分別通向連接,以控制每組緩存扇區(qū)中,數(shù)據(jù)寫入緩存頁碼的順序。
      [0066]當(dāng)該組緩存分區(qū)設(shè)置為寫鎖定狀態(tài)且與數(shù)據(jù)寫入線程100通信成功進行數(shù)據(jù)寫入操作時,緩存分區(qū)內(nèi)部對數(shù)據(jù)寫入的過程二次導(dǎo)向。在其中一實施例中,控制單元311控制緩存分區(qū)內(nèi)部也采用順序?qū)懭氲姆绞竭M行,一組數(shù)據(jù)寫入時,將本組數(shù)據(jù)按照順序?qū)懭敫骶彺嫔葏^(qū)的緩存頁面312-2中,即首先將該組數(shù)據(jù)寫入第一組緩存扇區(qū)的第一個緩存頁面312-2中,下一組數(shù)據(jù)寫入第一組緩存扇區(qū)的第二個緩存頁面312-2中,依次進行,直至該組緩存扇區(qū)寫滿,則緩存扇區(qū)內(nèi)部自己計數(shù),確定當(dāng)前緩存扇區(qū)編碼,并自動將未寫完的數(shù)據(jù)或者下一組數(shù)據(jù)寫入至第二組緩存扇區(qū)(下一緩存扇區(qū))的第一個緩存頁面312-2中,直至該緩存分區(qū)中所有的緩存頁面312-2均被寫滿。相應(yīng)的數(shù)據(jù)寫入時緩存分區(qū)寫滿判斷的步驟如下:每組緩存分區(qū)中,控制單元311比較緩存扇區(qū)編碼與緩存扇區(qū)的最大編碼數(shù)大小:若該緩存扇區(qū)編碼小于緩存分區(qū)的最大編碼數(shù),判斷下一組數(shù)據(jù)能夠在本緩存分區(qū)中寫入成功,若緩存扇區(qū)編碼等于緩存分區(qū)的最大編碼數(shù),則判斷緩存分區(qū)已滿,將下一組數(shù)據(jù)寫入下一個緩存分區(qū)中。
      [0067]作為一個優(yōu)選方案,數(shù)據(jù)緩存模塊300可為生產(chǎn)者與消費者模型。
      [0068]理論上緩存分區(qū)越大越好,這樣可以保證數(shù)據(jù)丟失少,但緩存分區(qū)越大對物理內(nèi)存的要求也就越高。由于緩存容量有限,故本發(fā)明還提供了一種并發(fā)數(shù)據(jù)的緩存模型,其同時包括兩組以上的上述并發(fā)數(shù)據(jù)的緩存結(jié)構(gòu)。每個緩存結(jié)構(gòu)的工作原理相同,此處不再贅述,上述并發(fā)數(shù)據(jù)的緩存模型中,同時經(jīng)由多個數(shù)據(jù)寫入線程100與外部數(shù)據(jù)源通信連接,進行數(shù)據(jù)的寫入操作,同時經(jīng)由多個數(shù)據(jù)讀取線程200與外部處理設(shè)備通信連接,將各緩存內(nèi)部的數(shù)據(jù)及時讀出并發(fā)送至外部處理設(shè)備中進行下一步的數(shù)據(jù)處理,從而有效增強數(shù)據(jù)的緩存能力。
      [0069]上述的對實施例的描述是為便于該技術(shù)領(lǐng)域的普通技術(shù)人員能理解和使用本發(fā)明。熟悉本領(lǐng)域技術(shù)的人員顯然可以容易地對這些實施例做出各種修改,并把在此說明的一般原理應(yīng)用到其他實施例中而不必經(jīng)過創(chuàng)造性的勞動。因此,本發(fā)明不限于上述實施例,本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明的揭示,不脫離本發(fā)明范疇所做出的改進和修改都應(yīng)該在本發(fā)明的保護范圍之內(nèi)。
      【主權(quán)項】
      1.一種并發(fā)數(shù)據(jù)的緩存方法,其特征在于:包括以下步驟:緩存分區(qū)的工作狀態(tài)設(shè)置為空閑狀態(tài)、寫鎖定狀態(tài)、寫滿狀態(tài)以及讀鎖定狀態(tài)中的任意一種, (A)每組數(shù)據(jù)寫入時,(Al)實時監(jiān)測是否存在寫鎖定狀態(tài)緩存分區(qū):若有寫鎖定狀態(tài)緩存分區(qū)直接轉(zhuǎn)入步驟(A2-2)進行該組數(shù)據(jù)寫入;若沒有寫鎖定狀態(tài)緩存分區(qū),(A2)實時監(jiān)測是否存在空閑狀態(tài)的緩存分區(qū): (A21)若有處于空閑狀態(tài)的緩存分區(qū),(A21-1)選定一組空閑狀態(tài)的緩存分區(qū)置為寫鎖定狀態(tài);(A21-2)向所述寫鎖定狀態(tài)的緩存分區(qū)寫入該組數(shù)據(jù):(A21-3)判斷所述數(shù)據(jù)是否寫入成功:若寫入成功,則該組數(shù)據(jù)寫入完成,結(jié)束本次數(shù)據(jù)寫入;若寫入失敗,則將當(dāng)前緩存分區(qū)置為寫滿狀態(tài),并轉(zhuǎn)入步驟(Al)繼續(xù)該組數(shù)據(jù)的寫入; (A22)若沒有處于空閑狀態(tài)的緩存分區(qū),則結(jié)束該組數(shù)據(jù)寫入; 步驟(B)數(shù)據(jù)讀取時,(BI)實時監(jiān)測是否存在寫滿狀態(tài)下的緩存分區(qū):若有處于寫滿狀態(tài)下的緩存分區(qū),(Bll)選定該組寫滿狀態(tài)的緩存分區(qū)置為讀鎖定狀態(tài);(B12)讀取該讀鎖定狀態(tài)緩存分區(qū)內(nèi)的緩存數(shù)據(jù),當(dāng)判斷所述讀鎖定狀態(tài)緩存分區(qū)讀取完畢時,將所述緩存設(shè)置為空閑狀態(tài),同時轉(zhuǎn)入步驟(BI)繼續(xù)下一組緩存分區(qū)的讀取;若沒有寫滿狀態(tài)的緩存分區(qū),轉(zhuǎn)入步驟(BI),繼續(xù)數(shù)據(jù)的讀取。2.根據(jù)權(quán)利要求1所述的并發(fā)數(shù)據(jù)的緩存方法,其特征在于:所述緩存分區(qū)中,同時只存在一組寫鎖定狀態(tài)緩存分區(qū)與一組讀鎖定狀態(tài)緩存分區(qū); 優(yōu)選的,全部數(shù)據(jù)寫入進程結(jié)束時,若存在一組未寫滿的緩存分區(qū),則將該組緩存分區(qū)置為寫滿狀態(tài)以進行數(shù)據(jù)的讀取。3.根據(jù)權(quán)利要求1或2所述的并發(fā)數(shù)據(jù)的緩存方法,其特征在于:依次順序訪問各緩存分區(qū)以監(jiān)測是否存在寫鎖定或空閑狀態(tài)的緩存分區(qū); 優(yōu)選的,采取遍歷、與數(shù)據(jù)寫入訪問相同的順序、緩存分區(qū)寫入完成主動上報中的任一方式實時監(jiān)測是否存在寫滿狀態(tài)的緩存分區(qū)。4.根據(jù)權(quán)利要求1所述的并發(fā)數(shù)據(jù)的緩存方法,其特征在于:所述緩存分區(qū)內(nèi)部采用分級管理的方式進行數(shù)據(jù)寫入操作,所述緩存分區(qū)中包括多個大小相同的緩存扇區(qū),且所述緩存扇區(qū)一一編碼,且包括多個大小相同的緩存頁面,所述每組寫入數(shù)據(jù)的大小與所述緩存頁面大小相同設(shè)置,則所述步驟(A21-3)中,判斷所述數(shù)據(jù)是否寫入成功包括以下步驟:每組數(shù)據(jù)寫入緩存分區(qū)的每一緩存扇區(qū)后,緩存扇區(qū)內(nèi)部計數(shù),確定當(dāng)前緩存扇區(qū)編碼,比較所述緩存扇區(qū)編碼與所述緩存扇區(qū)的最大編碼數(shù)大小:若該緩存扇區(qū)編碼小于所述緩存分區(qū)的最大編碼數(shù),判斷下一組數(shù)據(jù)能夠在本緩存分區(qū)中寫入成功,若緩存扇區(qū)編碼等于所述緩存分區(qū)的最大編碼數(shù),則判斷所述緩存分區(qū)已滿,轉(zhuǎn)入步驟(Al),將下一組數(shù)據(jù)寫入下一個緩存分區(qū)中; 優(yōu)選的,所述數(shù)據(jù)按照編碼順序?qū)懭胫了鼍彺嫔葏^(qū)中,且所述緩存頁面一一編碼,所述數(shù)據(jù)寫入至緩存扇區(qū)時,按照緩存頁面的編碼順序依次寫入。5.根據(jù)權(quán)利要求1所述的并發(fā)數(shù)據(jù)的緩存方法,其特征在于:所述步驟(A21-3)中,所述數(shù)據(jù)寫入成功判斷包括以下步驟:向所述寫鎖定狀態(tài)的緩存分區(qū)寫入外部發(fā)送的數(shù)據(jù)組:當(dāng)判斷所述寫鎖定狀態(tài)緩存分區(qū)未寫滿時,寫入成功,繼續(xù)該組緩存分區(qū)的數(shù)據(jù)寫入;當(dāng)判斷所述寫鎖定狀態(tài)緩存分區(qū)寫滿或外部數(shù)據(jù)寫完畢時,將該組緩存分區(qū)置為寫滿狀態(tài),并轉(zhuǎn)入步驟(Al)繼續(xù)下一組外部數(shù)據(jù)的寫入; 進一步的,所述寫鎖定狀態(tài)的緩存分區(qū)寫滿判斷包括以下步驟:向所述寫鎖定狀態(tài)的緩存分區(qū)寫入外部發(fā)送的數(shù)據(jù)時,比較外部數(shù)據(jù)量與所述寫鎖定狀態(tài)的緩存分區(qū)剩余空間大小,若外部數(shù)據(jù)的數(shù)量大于所述寫鎖定狀態(tài)的緩存分區(qū)剩余空間,判斷所述寫鎖定狀態(tài)的緩存分區(qū)寫滿;或,向所述寫鎖定狀態(tài)的緩存分區(qū)寫入外部發(fā)送的數(shù)據(jù)時,系統(tǒng)報錯,則判斷所述寫鎖定狀態(tài)的緩存分區(qū)寫滿。6.根據(jù)權(quán)利要求1所述的并發(fā)數(shù)據(jù)的緩存方法,其特征在于:所述步驟(BI)之前,還包括實時監(jiān)測是否存在讀鎖定狀態(tài)緩存分區(qū)的步驟,若有,直接轉(zhuǎn)入步驟(B12)讀取所述讀鎖定狀態(tài)緩存分區(qū)內(nèi)的緩存數(shù)據(jù);若無,則轉(zhuǎn)入步驟(BI); 優(yōu)選的,所述數(shù)據(jù)讀取速度大于數(shù)據(jù)寫入速度; 優(yōu)選的,其應(yīng)有于生產(chǎn)者與消費者模型。7.—種并發(fā)數(shù)據(jù)的緩存結(jié)構(gòu),其特征在于:其同時進行數(shù)據(jù)的寫入與讀取,包括一組數(shù)據(jù)寫入線程、一組數(shù)據(jù)讀取線程、一組數(shù)據(jù)緩存模塊以及一分區(qū)控制模塊; 所述數(shù)據(jù)緩存模塊包括多組緩存分區(qū); 所述分區(qū)控制模塊與所述數(shù)據(jù)緩存模塊通信連接以控制所述多個緩存分區(qū)的工作狀態(tài)以及被訪問順序,所述分區(qū)控制模塊用于將所述每個緩存分區(qū)的工作狀態(tài)設(shè)置為空閑狀態(tài)、寫鎖定狀態(tài)、寫滿狀態(tài)以及讀鎖定狀態(tài)中的任意一種,僅當(dāng)所述緩存分區(qū)為空閑狀態(tài)時支持寫鎖定,且所述緩存分區(qū)處于寫鎖定狀態(tài)時支持?jǐn)?shù)據(jù)寫入,僅當(dāng)所述緩存分區(qū)為寫滿狀態(tài)時支持讀鎖定,且所述緩存分區(qū)處于讀鎖定狀態(tài)時支持?jǐn)?shù)據(jù)讀出; 所述數(shù)據(jù)寫入線程與所述數(shù)據(jù)讀取線程分別經(jīng)由所述分區(qū)控制模塊與各緩存分區(qū)通信連接,所述分區(qū)控制模塊控制所述數(shù)據(jù)寫入線程與所述數(shù)據(jù)讀取線程訪問緩存分區(qū)的順序,以使得所述數(shù)據(jù)寫入線程與所述數(shù)據(jù)讀取線程根據(jù)所訪問緩存分區(qū)的工作狀態(tài)進行數(shù)據(jù)的寫入與讀取。8.根據(jù)權(quán)利要求7所述的緩存結(jié)構(gòu),其特征在于:所述每組緩存分區(qū)包括一控制單元以及多組緩存扇區(qū),所述緩存扇區(qū)一一編碼設(shè)置,所述控制單元與所述每組緩存扇區(qū)通信連接,以控制每組緩存分區(qū)中,數(shù)據(jù)寫入緩存扇區(qū)的順序; 進一步優(yōu)選的,所述每組緩存扇區(qū)包括一控制組件以及多個緩存頁面,所述緩存頁面一一編碼且每組寫入數(shù)據(jù)的大小與緩存頁面相同設(shè)置,所述控制組件與所述緩存頁面分別通向連接,以控制每組緩存扇區(qū)中,數(shù)據(jù)寫入緩存頁碼的順序。9.根據(jù)權(quán)利要求7所述的緩存結(jié)構(gòu),其特征在于:所述分區(qū)控制模塊包括一寫鎖定判斷單元以及一讀鎖定判斷單元; 所述寫鎖定判斷單元與數(shù)據(jù)緩存模塊通信連接,以控制數(shù)據(jù)緩存模塊中緩存分區(qū)的訪問順序、寫鎖定與去寫鎖定,所述數(shù)據(jù)寫入線程與所述寫鎖定判斷單元通信連接以根據(jù)所述寫鎖定判斷單元確定的訪問順序訪問的緩存分區(qū),并根據(jù)當(dāng)前訪問緩存分區(qū)的工作狀態(tài)進行數(shù)據(jù)的寫入操作; 所述讀鎖定判斷單元與相應(yīng)的數(shù)據(jù)緩存模塊通信連接,以控制數(shù)據(jù)緩存模塊中緩存分區(qū)的訪問順序、讀鎖定與去讀鎖定,所述數(shù)據(jù)讀取線程與所述讀鎖定判斷單元通信連接以根據(jù)所訪問的緩存分區(qū)的當(dāng)前狀態(tài)判斷是否讀取緩存數(shù)據(jù)。10.根據(jù)權(quán)利要求7所述的緩存結(jié)構(gòu),其特征在于:同時只存在一組寫鎖定狀態(tài)緩存分區(qū)與一組讀鎖定狀態(tài)緩存分區(qū)。 優(yōu)選的,所述數(shù)據(jù)緩存模塊為生產(chǎn)者與消費者模型。11.一種并發(fā)數(shù)據(jù)的緩存模型,其特征在于:同時包括至少兩組以上如權(quán)利要求7所述的并發(fā)數(shù)據(jù)的緩存結(jié)構(gòu)。
      【文檔編號】G06F12/0884GK105912479SQ201610210432
      【公開日】2016年8月31日
      【申請日】2016年4月7日
      【發(fā)明人】徐馳
      【申請人】武漢數(shù)字派特科技有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1