本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,特別是一種云數(shù)據(jù)中心的數(shù)據(jù)處理方法。
背景技術(shù):
云數(shù)據(jù)中心的數(shù)據(jù)處理問題是其需解決的主要問題之一。云數(shù)據(jù)中心的數(shù)據(jù)處理過程中,數(shù)據(jù)到達數(shù)據(jù)中心,首先進入任務(wù)隊列,新到達的任務(wù)數(shù)據(jù)作為生產(chǎn)者不停的放入任務(wù)隊列,處理任務(wù)的虛擬機作為消費者從任務(wù)隊列中取出數(shù)據(jù)包進行處理。該過程可以看作一個生產(chǎn)者消費者問題。
生產(chǎn)者消費者問題描述了兩個共享固定大小緩沖區(qū)的線程——即所謂的“生產(chǎn)者”和“消費者”——在實際運行時會發(fā)生的問題。生產(chǎn)者的主要作用是生成一定量的數(shù)據(jù)放到緩沖區(qū)中,然后重復此過程。與此同時,消費者也在緩沖區(qū)消耗這些數(shù)據(jù)。但仍存在這樣的問題:生產(chǎn)者會在緩沖區(qū)滿時加入數(shù)據(jù),消費者會在緩沖區(qū)中空時消耗數(shù)據(jù)。
目前的解決方法,在處理數(shù)據(jù)包的過程中,會出現(xiàn)消費者對數(shù)據(jù)包的重復處理,造成資源和能耗的浪費。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是克服現(xiàn)有技術(shù)的不足而提供一種云數(shù)據(jù)中心的數(shù)據(jù)處理方法,本發(fā)明能加快消費者對數(shù)據(jù)包的處理。
本發(fā)明為解決上述技術(shù)問題采用以下技術(shù)方案:
根據(jù)本發(fā)明提出的一種云數(shù)據(jù)中心的數(shù)據(jù)處理方法,包括以下步驟:
步驟一、確定生產(chǎn)者消費者模型,該模型為環(huán)形隊列;
步驟二、生產(chǎn)者按順序從環(huán)形隊列的初始位置逐個放入數(shù)據(jù)包,同時將數(shù)據(jù)包的信息賦值到數(shù)據(jù)單元packet_unit中,數(shù)據(jù)單元packet_unit是用來保存每個數(shù)據(jù)包的包號、長度和在環(huán)形內(nèi)存隊列中的位置信息;
步驟三、判斷策略執(zhí)行條件并執(zhí)行相應的策略;具體如下:
若當前要處理的數(shù)據(jù)包的位置小于隊列長度且當前隊尾收到的數(shù)據(jù)包號已經(jīng)大于當前需要處理的數(shù)據(jù)包號,此時處理從g_current+M 到queue_size-1的數(shù)據(jù)包;其中,共享元素g_current用來表示當前生產(chǎn)者生產(chǎn)數(shù)據(jù)包在隊列中的位置,queue_size表示環(huán)形隊列長度,M為數(shù)據(jù)處理的間隔步數(shù);
若當前要處理的數(shù)據(jù)包的位置小于隊列長度且當前收到的數(shù)據(jù)包號已經(jīng)大于當前需要處理的數(shù)據(jù)包號,此時處理從0 到g_current的數(shù)據(jù)包;
若當前要處理的數(shù)據(jù)包的位置已經(jīng)大于或等于隊列長度,此時數(shù)據(jù)包的位置取(g_current+ M) % queue_size;若當前需要處理的數(shù)據(jù)包號已經(jīng)大于當前已經(jīng)處理的數(shù)據(jù)包號,所以此時處理從(g_current+ M) % queue_size 到g_current的數(shù)據(jù)包。
作為本發(fā)明所述的一種云數(shù)據(jù)中心的數(shù)據(jù)處理方法進一步優(yōu)化方案,M=1。
作為本發(fā)明所述的一種云數(shù)據(jù)中心的數(shù)據(jù)處理方法進一步優(yōu)化方案,M=1是表明生產(chǎn)者和消費的處理速度相同。
作為本發(fā)明所述的一種云數(shù)據(jù)中心的數(shù)據(jù)處理方法進一步優(yōu)化方案,M=2。
作為本發(fā)明所述的一種云數(shù)據(jù)中心的數(shù)據(jù)處理方法進一步優(yōu)化方案,M=3。
本發(fā)明采用以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下技術(shù)效果:
(1)根據(jù)消費者的三種處理策略,在單生產(chǎn)者和雙消費者的實驗環(huán)境下,消費者可以迅速找到當前沒有處理過的數(shù)據(jù)包,進而加快數(shù)據(jù)包的處理速度;
(2)實際情況中,通過queue_size和M值的設(shè)定,可以盡可能的減少消費者對數(shù)據(jù)包的重復處理,用最小的消耗達到高速處理數(shù)據(jù)的目的;
(3)本發(fā)明的關(guān)鍵點是:多個消費者根據(jù)不同情況選擇對應策略處理環(huán)形隊列中的數(shù)據(jù),以最小的重復處理消耗達到高速處理數(shù)據(jù)包的目的;
(4)本發(fā)明提出了基于環(huán)形隊列的多消費者數(shù)據(jù)處理策略,分三種情況對多消費者的數(shù)據(jù)處理問題,進行了分析,并提出相應的數(shù)據(jù)處理策略;本發(fā)明所提出的數(shù)據(jù)處理方法能降低重復數(shù)據(jù)包的處理次數(shù),提高多消費者數(shù)據(jù)處理的效率。
附圖說明
圖1為本發(fā)明環(huán)形隊列示意圖;
圖2為本發(fā)明策略方法的消費者處理流程圖;
圖3為本發(fā)明策略方法的情況A示意圖;
圖4為本發(fā)明策略方法的情況B示意圖;
圖5為本發(fā)明策略方法的情況C示意圖;
圖6是本方法的流程圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明的技術(shù)方案做進一步的詳細說明:
目前解決本發(fā)明背景技術(shù)中提出的問題,就必須讓生產(chǎn)者在緩沖區(qū)滿時休眠(要么干脆就放棄數(shù)據(jù)),等到下次消費者消耗緩沖區(qū)中的數(shù)據(jù)的時候,生產(chǎn)者才能被喚醒,開始往緩沖區(qū)添加數(shù)據(jù)。同樣,也可以讓消費者在緩沖區(qū)空時進入休眠,等到生產(chǎn)者往緩沖區(qū)添加數(shù)據(jù)之后,再喚醒消費者。通常采用進程間通信的方法解決該問題,常用的方法有信號燈法等。如果解決方法不夠完善,則容易出現(xiàn)死鎖的情況。出現(xiàn)死鎖時,兩個線程都會陷入休眠,等待對方喚醒自己。該問題也能被推廣到多個生產(chǎn)者和消費者的情形。
圖6是本方法的流程圖,一種云數(shù)據(jù)中心的數(shù)據(jù)處理方法,所述方法包括如下步驟:
I、確定生產(chǎn)者消費者模型;
II、判斷策略執(zhí)行條件;
III、執(zhí)行相應的策略;
IV、執(zhí)行完畢;
優(yōu)選的,所述步驟I包括采用了基于環(huán)形的隊列。
首先介紹本發(fā)明中涉及的幾個基礎(chǔ)定義和問題。
1)定義環(huán)形數(shù)據(jù)隊列,隊列長度為queue_size。此數(shù)值由實際需要和系統(tǒng)性能決定。
2)定義共享元素g_current,用來表示當前生產(chǎn)者生產(chǎn)數(shù)據(jù)包在隊列中的位置。
3)無鎖性,即是為了保證生產(chǎn)者和消費者不同時處理同一塊內(nèi)存區(qū)域。所以消費者每次處理環(huán)形隊列的g_current+M位置來實現(xiàn)無鎖性。M值的大小受生產(chǎn)者和消費者的處理影響。本發(fā)明采取理想情況M=1,表明生產(chǎn)者和消費的處理速度相同。
4)定義數(shù)據(jù)單元packet_unit,用來保存每個數(shù)據(jù)包的包號counter、長度len和在環(huán)形內(nèi)存隊列中的位置信息x。
5)定義當前需處理數(shù)據(jù)包的編號為g_next_pkt
生產(chǎn)者按順序從環(huán)形隊列的初始位置逐個放入數(shù)據(jù)包,同時把數(shù)據(jù)包的信息賦值到數(shù)據(jù)單元packet_unit中,如下圖1。
優(yōu)選的,所述步驟II中的策略執(zhí)行條件包括兩種類型,三種情況;
本發(fā)明把消費者處理數(shù)據(jù)的模式分為兩類,共三種情況,根據(jù)不同情況處理環(huán)形隊列中不同位置的數(shù)據(jù),以達到加速處理數(shù)據(jù)的目的。圖2為消費者處理流程圖。
一類:g_current+1 < queue_size
此類情況即當前要處理的數(shù)據(jù)包的位置小于隊列長度。然后分別判斷情況A和B進行數(shù)據(jù)處理。
情況A(packet_unit[queue_size-1].counter > g_next_pkt)
這表示當前隊尾收到的數(shù)據(jù)包號已經(jīng)大于當前需要處理的數(shù)據(jù)包號,此情況說明當前最小的包號(即當前需要處理的包號)在隊列的后半段。所以此時處理從g_current+1 到queue_size-1的數(shù)據(jù)包,如下圖3。
情況B(packet_unit[g_current].counter > g_next_pkt)
這表示當前收到的數(shù)據(jù)包號已經(jīng)大于當前需要處理的數(shù)據(jù)包號,此情況說明當前最小的包號(即當前需要處理的包號)在隊列的前半段。所以此時處理從0 到g_current的數(shù)據(jù)包,如下圖4。
二類:g_current+1 >= queue_size
此類情況表明當前要處理的數(shù)據(jù)包的位置已經(jīng)大于等于隊列長度,此時包的位置取(g_current+1) % queue_size。
情況C(packet_unit[(g_current+1) % queue_size].counter > g_next_pkt)
這表示當前需要處理的數(shù)據(jù)包號已經(jīng)大于當前已經(jīng)處理的數(shù)據(jù)包號,此情況說明當前最小的包號(即當前需要處理的包號)在(g_current+1) % queue_size和g_current之間。所以此時處理從(g_current+1) % queue_size 到g_current的數(shù)據(jù)包。本文M=1,此情況即是處理整個環(huán)形隊列,如下圖5。
根據(jù)消費者的三種處理策略,在單生產(chǎn)者和雙消費者的實驗環(huán)境下,消費者可以迅速找到當前沒有處理過的數(shù)據(jù)包,進而加快數(shù)據(jù)包的處理速度。
實際情況中,通過queue_size和M值的設(shè)定,可以盡可能的減少消費者對數(shù)據(jù)包的重復處理,用最小的消耗達到高速處理數(shù)據(jù)的目的。
本發(fā)明的關(guān)鍵點是:多個消費者根據(jù)不同情況選擇對應策略處理環(huán)形隊列中的數(shù)據(jù),以最小的重復處理消耗達到高速處理數(shù)據(jù)包的目的。
本發(fā)明提出了基于環(huán)形隊列的多消費者數(shù)據(jù)處理策略,分三種情況對多消費者的數(shù)據(jù)處理問題,進行了分析,并提出相應的數(shù)據(jù)處理策略。本發(fā)明所提出的數(shù)據(jù)處理方法能降低重復數(shù)據(jù)包的處理次數(shù),提高多消費者數(shù)據(jù)處理的效率。
顯然,以上所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護的范圍。