專利名稱:一種預(yù)測(cè)帶寬的數(shù)據(jù)發(fā)送方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)傳輸技術(shù),尤其涉及一種預(yù)測(cè)帶寬的數(shù)據(jù)發(fā)送方法。
背景技術(shù):
隨著無(wú)線局域網(wǎng)技術(shù)的應(yīng)用日漸普及,無(wú)線數(shù)據(jù)傳輸技術(shù)已經(jīng)運(yùn)用到許多領(lǐng)域,例如,投影機(jī)廠商紛紛將無(wú)線數(shù)據(jù)傳輸技術(shù)運(yùn)用到投影機(jī)上,開(kāi)發(fā)出無(wú)線投影機(jī),極大的方便了用戶的使用。
常見(jiàn)的無(wú)線網(wǎng)絡(luò)協(xié)議有電氣和電子工程師協(xié)會(huì)(IEEE)提出的IEEE802.11協(xié)議,以傳輸圖像數(shù)據(jù)為例,目前比較流行的無(wú)線數(shù)據(jù)發(fā)送方法主要有以下兩種現(xiàn)有技術(shù)一阻塞方式傳送。阻塞方式傳送的流程如圖1中的步驟101到步驟104所示,在這種方案中,圖像數(shù)據(jù)的獲取和傳送在同一個(gè)線程中處理完成。首先所述處理線程獲取當(dāng)前要發(fā)送的數(shù)據(jù),再發(fā)送這些獲取的數(shù)據(jù),數(shù)據(jù)發(fā)送之后需要等待接收方的確認(rèn),由于不知道接收方給出確認(rèn)的時(shí)間,程序會(huì)設(shè)置一個(gè)定長(zhǎng)的延遲時(shí)間,直到接收方有確認(rèn)時(shí),才會(huì)繼續(xù)獲取數(shù)據(jù)。這種方案造成的缺點(diǎn)為該方法在發(fā)送數(shù)據(jù)時(shí)將線程阻塞住,即傳送數(shù)據(jù)時(shí)不能獲取數(shù)據(jù),只有當(dāng)數(shù)據(jù)傳送完畢且收到確認(rèn)后,才能繼續(xù)獲取數(shù)據(jù),然后再發(fā)送新獲取的數(shù)據(jù),無(wú)法保證數(shù)據(jù)獲取的連續(xù)性,效率很低,丟幀現(xiàn)象嚴(yán)重;另外,當(dāng)程序每開(kāi)始一次新的延遲等待時(shí),如果有應(yīng)答返回,這時(shí)線程還會(huì)繼續(xù)等待至定長(zhǎng)的時(shí)間,因此存在無(wú)謂的等待時(shí)間,效率不高。
現(xiàn)有技術(shù)二異步方式傳送。異步傳送方式有兩個(gè)線程,包括獲取數(shù)據(jù)線程和發(fā)送數(shù)據(jù)線程。圖2所示為獲取數(shù)據(jù)線程的流程圖,如圖2中步驟201到步驟205所示,在獲取數(shù)據(jù)線程中,首先獲取當(dāng)前要發(fā)送的數(shù)據(jù)包,然后申請(qǐng)緩沖池,如果申請(qǐng)失敗則再重新申請(qǐng),如此反復(fù)申請(qǐng),直到申請(qǐng)成功,將數(shù)據(jù)包的索引作為一個(gè)任務(wù)節(jié)點(diǎn)發(fā)送給發(fā)送隊(duì)列;由于發(fā)送隊(duì)列不能夠無(wú)限長(zhǎng),否則會(huì)造成發(fā)送延遲嚴(yán)重,所以,如果當(dāng)發(fā)送隊(duì)列的任務(wù)節(jié)點(diǎn)數(shù)達(dá)到上限時(shí),根據(jù)經(jīng)驗(yàn),一般發(fā)送隊(duì)列的上限節(jié)點(diǎn)數(shù)為16,則再重新向發(fā)送隊(duì)列發(fā)送該數(shù)據(jù)包的索引,如此反復(fù)發(fā)送,直到發(fā)送隊(duì)列釋放任務(wù)節(jié)點(diǎn),將該數(shù)據(jù)包的索引加入到發(fā)送隊(duì)列中,開(kāi)始啟動(dòng)發(fā)送數(shù)據(jù)線程,由傳輸控制協(xié)議(TCP)完成發(fā)送任務(wù)。圖3為發(fā)送數(shù)據(jù)線程的流程圖,如圖3所示,該流程包括以下步驟步驟301從發(fā)送隊(duì)列中獲取發(fā)送任務(wù)節(jié)點(diǎn);步驟302從緩沖池中讀取步驟301中獲取任務(wù)節(jié)點(diǎn)所對(duì)應(yīng)的數(shù)據(jù)包;步驟303發(fā)送步驟302中讀取的數(shù)據(jù)包;步驟304釋放步驟303中所述數(shù)據(jù)包所占緩沖池的空間;步驟305在發(fā)送隊(duì)列中釋放所述任務(wù)節(jié)點(diǎn)。
采用現(xiàn)有技術(shù)二所述的方法可以使得獲取數(shù)據(jù)和發(fā)送數(shù)據(jù)不會(huì)相互阻塞,相對(duì)現(xiàn)有技術(shù)一來(lái)說(shuō)提高了效率,但是,數(shù)據(jù)包在被發(fā)送之前會(huì)進(jìn)入緩沖池,一般緩沖池的存儲(chǔ)空間大小以能接收到最大數(shù)據(jù)包為標(biāo)準(zhǔn),例如,在圖像數(shù)據(jù)的發(fā)送中,由于圖像數(shù)據(jù)一般最大為2兆(M),所以緩沖池大小一般為2M,如果緩沖池已經(jīng)存滿了數(shù)據(jù)包,則會(huì)申請(qǐng)失敗,該數(shù)據(jù)包就需要等待,只有當(dāng)緩沖池內(nèi)的數(shù)據(jù)包被發(fā)送,緩沖池內(nèi)騰出足夠的空間時(shí),新的圖像數(shù)據(jù)包才能進(jìn)入緩沖池。在現(xiàn)有技術(shù)二中,采用兩個(gè)存儲(chǔ)空間相同的緩沖池存儲(chǔ)數(shù)據(jù)包,這種方案的缺點(diǎn)是當(dāng)數(shù)據(jù)包的大小差異比較懸殊,而且連續(xù)有幾個(gè)大數(shù)據(jù)包生成時(shí),每個(gè)數(shù)據(jù)包會(huì)獨(dú)自占據(jù)一個(gè)緩沖池。這時(shí),新產(chǎn)生的數(shù)據(jù)包無(wú)論大小,都需要排隊(duì)等候,而大數(shù)據(jù)包傳送的時(shí)間比較長(zhǎng),這樣就造成了較多的新數(shù)據(jù)包需要等待很長(zhǎng)時(shí)間才能進(jìn)入發(fā)送緩沖池。例如,在發(fā)送圖像數(shù)據(jù)的技術(shù)中,設(shè)定兩個(gè)緩沖池的大小都為2M,有一個(gè)下列大小的數(shù)據(jù)包隊(duì)列100K,200K,200K,1.6M,1.5M,400K,100K...。首先,100K、200K,200K的數(shù)據(jù)包都會(huì)被分配到第一緩沖池中,然后1.6M的數(shù)據(jù)包會(huì)被分配到第二緩沖池中,然后1.5M的數(shù)據(jù)包進(jìn)入第一緩沖池中,從而造成兩個(gè)緩沖池很快飽和,之后的數(shù)據(jù)包無(wú)論大小都需要等待,而且需要等待很長(zhǎng)的時(shí)間才能進(jìn)入緩沖池,所以這種大小相等的雙緩沖池機(jī)制方法造成了大量數(shù)據(jù)包需要排隊(duì)等候,效率不高。
現(xiàn)有技術(shù)二中沒(méi)有給出怎樣獲取等待時(shí)間的方法,因此,當(dāng)緩沖池沒(méi)有足夠的空間時(shí),需要反復(fù)申請(qǐng)緩沖池;或者當(dāng)發(fā)送隊(duì)列滿時(shí),需要反復(fù)向發(fā)送隊(duì)列發(fā)送數(shù)據(jù)包索引,這樣會(huì)耗費(fèi)大量的處理器資源。
在無(wú)線網(wǎng)絡(luò)中,由于無(wú)線信號(hào)非常不穩(wěn)定,所以需要經(jīng)常預(yù)測(cè)網(wǎng)絡(luò)的實(shí)際帶寬,在現(xiàn)有的底層協(xié)議中,有一種預(yù)測(cè)帶寬并計(jì)算等待時(shí)間的方法,該帶寬預(yù)測(cè)計(jì)算方法如公式(1)RTT=總發(fā)送時(shí)間/總字節(jié)數(shù) (1)網(wǎng)絡(luò)帶寬可用環(huán)路時(shí)間(RTT,Round Trip Time)來(lái)表示,RTT為數(shù)據(jù)包從發(fā)送到收到接收方的應(yīng)答所經(jīng)歷的時(shí)間,所述的總發(fā)送時(shí)間為設(shè)定的一段時(shí)間,所述的總字節(jié)數(shù)為在所述的總發(fā)送時(shí)間內(nèi)發(fā)送的所有數(shù)據(jù)包的字節(jié)數(shù)之和,再利用公式(2)獲得需等待的時(shí)間TT=sizeof(data)×RTT/2n (2)公式(2)中的sizeof(data)為發(fā)送隊(duì)列中所有數(shù)據(jù)包的字節(jié)數(shù)之和,n為發(fā)送隊(duì)列的節(jié)點(diǎn)數(shù),RTT為根據(jù)上述公式(1)獲得的RTT。
公式(1)中的RTT其實(shí)是網(wǎng)絡(luò)的平均帶寬,由于無(wú)線網(wǎng)絡(luò)信號(hào)易受外界干擾,無(wú)線網(wǎng)絡(luò)的帶寬實(shí)時(shí)變化比較大,平均帶寬往往不能反映當(dāng)前的網(wǎng)絡(luò)狀況,所以這種計(jì)算方法往往不能正確預(yù)測(cè)當(dāng)前帶寬,從而不能準(zhǔn)確地獲得等待時(shí)間T,所以不能及時(shí)地將數(shù)據(jù)包送入緩沖池,效率不高,若數(shù)據(jù)包較大,則可能會(huì)造成后續(xù)數(shù)據(jù)包延遲嚴(yán)重,甚至發(fā)生丟幀錯(cuò)誤。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的是提供所一種預(yù)測(cè)帶寬的數(shù)據(jù)發(fā)送方法,使得在數(shù)據(jù)的發(fā)送過(guò)程中,降低對(duì)處理器資源的耗費(fèi),并減少需等待的數(shù)據(jù)包的數(shù)量,縮短數(shù)據(jù)包的等待時(shí)間,從而提高數(shù)據(jù)發(fā)送的實(shí)時(shí)性和連續(xù)性,提高數(shù)據(jù)的發(fā)送效率。
為了實(shí)現(xiàn)上述目的,本發(fā)明的技術(shù)方案具體是這樣實(shí)現(xiàn)的一種預(yù)測(cè)帶寬的數(shù)據(jù)發(fā)送方法,包括獲取數(shù)據(jù)線程和發(fā)送數(shù)據(jù)線程,其特征在于,在發(fā)送設(shè)備的內(nèi)存中開(kāi)辟空間大小不同的至少兩塊緩沖池,所述的獲取數(shù)據(jù)線程包括以下步驟A、判斷是否有數(shù)據(jù)包要發(fā)送,如果有,則獲取一個(gè)要發(fā)送的數(shù)據(jù)包;否則,返回步驟A,繼續(xù)判斷;B、為所獲取的數(shù)據(jù)包在第一緩沖池中申請(qǐng)空間,如果申請(qǐng)成功,則執(zhí)行步驟F,否則,執(zhí)行步驟C;C、為所獲取的數(shù)據(jù)包在下一個(gè)緩沖池中申請(qǐng)空間,如果申請(qǐng)成功,則執(zhí)行步驟F;否則,則執(zhí)行步驟D;D、判斷是否還有緩沖池,若有,則返回步驟C,若沒(méi)有,則執(zhí)行步驟E;E、獲取等待時(shí)間,經(jīng)過(guò)該等待時(shí)間后,返回步驟B;F、判斷發(fā)送隊(duì)列是否滿,如果滿,則執(zhí)行步驟G;否則,執(zhí)行步驟H;G、獲取等待時(shí)間,經(jīng)過(guò)該等待時(shí)間后,返回步驟F;H、將所獲取的數(shù)據(jù)包自身的索引作為一個(gè)任務(wù)節(jié)點(diǎn)發(fā)送給發(fā)送隊(duì)列,由發(fā)送數(shù)據(jù)線程完成數(shù)據(jù)包的發(fā)送,并返回步驟A。
所述緩沖池為兩塊大小不同的緩沖池,且大緩沖池空間大小為在數(shù)據(jù)發(fā)送過(guò)程中最大數(shù)據(jù)包的大小。
所述小緩沖池空間大小為大緩沖池空間大小的一半。
所述獲取等待時(shí)間的方法為預(yù)測(cè)當(dāng)前網(wǎng)絡(luò)帶寬,再根據(jù)T=sizeof(data)×RTTcur/2n計(jì)算等待時(shí)間,其中,T為等待時(shí)間,sizeof(data)為發(fā)送隊(duì)列中所有數(shù)據(jù)包的字節(jié)數(shù)之和,n為發(fā)送隊(duì)列的節(jié)點(diǎn)數(shù),RTTcur為當(dāng)前網(wǎng)絡(luò)帶寬。
所述的當(dāng)前網(wǎng)絡(luò)帶寬為發(fā)送當(dāng)前數(shù)據(jù)包時(shí)的網(wǎng)絡(luò)帶寬。
所述預(yù)測(cè)當(dāng)前網(wǎng)絡(luò)帶寬的方法為根據(jù)RTTcur=α×RTTprev1+(1-α)×RTTprev2迭代獲取當(dāng)前網(wǎng)絡(luò)帶寬,其中,RTTprev1為發(fā)送上一個(gè)數(shù)據(jù)包時(shí)的網(wǎng)絡(luò)帶寬,RTTprev2為發(fā)送上上個(gè)數(shù)據(jù)包時(shí)的網(wǎng)絡(luò)帶寬,α為權(quán)重系數(shù)。
所述權(quán)重系數(shù)的取值范圍介于0到1之間。
所述RTTcur的計(jì)算中,最初兩個(gè)RTT的值為發(fā)送數(shù)據(jù)包所用的時(shí)間/該數(shù)據(jù)包的總字節(jié)數(shù)。
所述的發(fā)送數(shù)據(jù)線程利用傳輸控制協(xié)議TCP實(shí)現(xiàn)。
由于本發(fā)明所述的方法采用了空間大小不同的雙緩沖池機(jī)制,可以有效地降低新的數(shù)據(jù)包進(jìn)入緩沖池之前的等待時(shí)間,能夠避免大數(shù)據(jù)包阻塞緩沖池的現(xiàn)象,使得大小數(shù)據(jù)包均可以及時(shí)進(jìn)入發(fā)送緩沖池,合理的減少了排隊(duì)等候的時(shí)間。另外,本發(fā)明所述方法利用動(dòng)態(tài)預(yù)測(cè)帶寬技術(shù)預(yù)測(cè)帶寬并獲取等待時(shí)間,從而避免對(duì)緩沖池的多次無(wú)謂的重復(fù)申請(qǐng),降低對(duì)處理器資源的耗費(fèi),動(dòng)態(tài)預(yù)測(cè)帶寬技術(shù)比現(xiàn)有的帶寬預(yù)測(cè)技術(shù)更科學(xué)、更合理,更能夠反映當(dāng)前網(wǎng)絡(luò)的帶寬,更準(zhǔn)確地計(jì)算出當(dāng)前的網(wǎng)絡(luò)帶寬,更及時(shí)地反映出當(dāng)前的網(wǎng)絡(luò)狀況,并根據(jù)這個(gè)預(yù)測(cè)帶寬值來(lái)獲取準(zhǔn)確的等待時(shí)間,然后及時(shí)的將數(shù)據(jù)包丟進(jìn)發(fā)送緩沖池,這樣就避免了無(wú)謂的等待時(shí)間,減少數(shù)據(jù)包傳送的延遲以及降低丟幀的概率。綜上所述,本發(fā)明所述的方法提高了在網(wǎng)絡(luò)帶寬不穩(wěn)定以及數(shù)據(jù)大小差異比較大時(shí)數(shù)據(jù)發(fā)送的實(shí)時(shí)性和連續(xù)性,進(jìn)一步提高了數(shù)據(jù)的發(fā)送效率。
圖1為現(xiàn)有技術(shù)一所述無(wú)線數(shù)據(jù)發(fā)送方法的流程圖;圖2為現(xiàn)有技術(shù)二所述的獲取數(shù)據(jù)線程的流程圖;圖3為現(xiàn)有技術(shù)二所述的發(fā)送數(shù)據(jù)線程的流程圖;圖4為本發(fā)明實(shí)施例所述獲取數(shù)據(jù)線程的流程圖。
具體實(shí)施例方式
下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明再作進(jìn)一步詳細(xì)的說(shuō)明。
本實(shí)施例中,以無(wú)線圖像數(shù)據(jù)發(fā)送為例說(shuō)明本發(fā)明所述的方法。本發(fā)明所述的方法采用雙線程來(lái)完成無(wú)線數(shù)據(jù)的發(fā)送,包括獲取數(shù)據(jù)線程和發(fā)送數(shù)據(jù)線程。在獲取數(shù)據(jù)線程中,為了提高無(wú)線發(fā)送數(shù)據(jù)的效率,本發(fā)明所述的方法采用了大小不等的多緩沖池機(jī)制,即在內(nèi)存中開(kāi)辟多塊大小不同的緩沖池。針對(duì)圖像數(shù)據(jù)的特點(diǎn),本實(shí)施例中,在發(fā)送設(shè)備內(nèi)存中開(kāi)辟兩塊緩沖池,第一緩沖池的空間大小是第二緩沖池空間大小的一半,第二緩沖池的空間大小為最大數(shù)據(jù)包的大小。本實(shí)施例中以發(fā)送圖像數(shù)據(jù)為例,一般情況下,最大的圖像數(shù)據(jù)包大小為大概為2M Byte。因此在本實(shí)施例中,第一緩沖池的空間大小為1M Byte,第二緩沖池的空間大小為2M Byte。
當(dāng)獲取當(dāng)前要發(fā)送的數(shù)據(jù)包后,將為該數(shù)據(jù)包申請(qǐng)緩沖池,首先是在第一緩沖池內(nèi)申請(qǐng),如果第一緩沖池滿或者沒(méi)有足夠的空間,則在第二緩沖池中申請(qǐng),如果在第二緩沖池內(nèi)也申請(qǐng)不到內(nèi)存空間,則該數(shù)據(jù)包就需要等待。直到當(dāng)前發(fā)送的數(shù)據(jù)包傳送結(jié)束之后,該數(shù)據(jù)包占用的緩沖池將被釋放,緩沖池才可能有足夠的空間容納新的數(shù)據(jù)包。采用大小不等的雙緩沖池機(jī)制,能夠有效的降低數(shù)據(jù)包的排隊(duì)時(shí)間,當(dāng)數(shù)據(jù)包的大小差異比較懸殊,而且連續(xù)有幾個(gè)大數(shù)據(jù)包生成時(shí),大的數(shù)據(jù)包在大的緩沖池中申請(qǐng),小的數(shù)據(jù)包可在兩個(gè)緩沖池中申請(qǐng),這樣就避免了兩個(gè)緩沖池都被大數(shù)據(jù)包占據(jù)的情況,減少需要排隊(duì)等待的數(shù)據(jù)包的數(shù)量,使得后續(xù)的小數(shù)據(jù)包可及時(shí)進(jìn)入緩沖池,減少丟幀的概率。例如,有一下列大小的數(shù)據(jù)包隊(duì)列100K,200K,200K,1.6M,1.5M,400K,100K...。首先,100K、200K,200K的數(shù)據(jù)包都會(huì)被分配到第一緩沖池中,然后1.6M的數(shù)據(jù)包會(huì)被分配到第二緩沖池中,這時(shí)1.5M的數(shù)據(jù)包就需要等待申請(qǐng)第二緩沖池,而1.5M數(shù)據(jù)包后面的400K以及100K數(shù)據(jù)包仍可以進(jìn)入第一緩沖池,需要等待的數(shù)據(jù)包只有1.5M一個(gè)。所以,這種一大一小的雙緩沖池設(shè)計(jì)機(jī)制有效地降低了新的數(shù)據(jù)包進(jìn)入緩沖池之前的等待時(shí)間,能夠避免大數(shù)據(jù)包阻塞緩沖池的現(xiàn)象,使得大小數(shù)據(jù)包均可以及時(shí)進(jìn)入發(fā)送緩沖池,合理的減少了排隊(duì)等候的時(shí)間。
當(dāng)緩沖池沒(méi)有足夠的空間時(shí),需要預(yù)測(cè)帶寬并計(jì)算數(shù)據(jù)包需要等待的時(shí)間,當(dāng)?shù)却臅r(shí)間結(jié)束后,立即重新申請(qǐng)緩沖池,及時(shí)地將數(shù)據(jù)包放入緩沖池中。為了解決現(xiàn)有技術(shù)中預(yù)測(cè)帶寬技術(shù)存在的缺點(diǎn),本發(fā)明所述的方法采用了動(dòng)態(tài)預(yù)測(cè)帶寬技術(shù),預(yù)測(cè)帶寬的計(jì)算方法如公式(3)RTTcur=α×RTTprev1+(1-α)×RTTprev2(3)公式(3)中,RTTcur為發(fā)送當(dāng)前數(shù)據(jù)包時(shí)的RTT預(yù)測(cè)值,RTTprev1為發(fā)送上一個(gè)數(shù)據(jù)包時(shí)的RTT預(yù)測(cè)值,RTTprev2為發(fā)送上上個(gè)數(shù)據(jù)包時(shí)的RTT預(yù)測(cè)值,α為權(quán)重系數(shù),α的取值范圍介于0到1之間。所述的公式(3)根據(jù)上兩次的網(wǎng)絡(luò)流量來(lái)預(yù)測(cè)當(dāng)前網(wǎng)絡(luò)帶寬,并運(yùn)用統(tǒng)計(jì)學(xué)原理,選取合適的權(quán)重系數(shù),使得預(yù)測(cè)結(jié)果非常貼近真實(shí)的網(wǎng)絡(luò)帶寬。所述的公式(3)是一個(gè)迭代的過(guò)程,發(fā)送頭兩個(gè)數(shù)據(jù)包時(shí)的RTT根據(jù)公式(4)來(lái)獲得RTT=發(fā)送數(shù)據(jù)包所用的時(shí)間/該數(shù)據(jù)包的總字節(jié)數(shù) (4)根據(jù)公式(4)可獲得發(fā)送第一個(gè)數(shù)據(jù)包時(shí)的RTT,以及發(fā)送第二個(gè)數(shù)據(jù)包時(shí)的RTT,再根據(jù)公式(3)迭代獲得后續(xù)發(fā)送每個(gè)數(shù)據(jù)包時(shí)的RTT。
預(yù)測(cè)出當(dāng)前網(wǎng)絡(luò)的帶寬RTTcur后,依據(jù)該帶寬獲取等待時(shí)間T,即當(dāng)前發(fā)送的數(shù)據(jù)包的傳送時(shí)間,獲取方法如公式(5)T=sizeof(data)×RTTcur/2n(5)上述公式(5)中的sizeof(data)為發(fā)送隊(duì)列中所有數(shù)據(jù)包的字節(jié)數(shù)之和,n為發(fā)送隊(duì)列的節(jié)點(diǎn)數(shù),RTTcur為根據(jù)上述公式(3)獲得發(fā)送當(dāng)前數(shù)據(jù)包時(shí)的RTT。
本發(fā)明所述的動(dòng)態(tài)預(yù)測(cè)帶寬技術(shù)能夠比較準(zhǔn)確地計(jì)算出當(dāng)前的網(wǎng)絡(luò)帶寬,及時(shí)地反映出當(dāng)前的網(wǎng)絡(luò)狀況,并根據(jù)這個(gè)預(yù)測(cè)帶寬值來(lái)獲取準(zhǔn)確的等待時(shí)間,然后及時(shí)的將數(shù)據(jù)包丟進(jìn)發(fā)送緩沖池,避免了無(wú)謂的等待時(shí)間。
圖4為本發(fā)明實(shí)施例所述獲取數(shù)據(jù)線程的流程圖,如圖4所示,該流程包括以下步驟步驟401、判斷是否有數(shù)據(jù)包要發(fā)送,如果有,則獲取一個(gè)要發(fā)送的數(shù)據(jù)包作為當(dāng)前要發(fā)送的數(shù)據(jù)包;否則,返回步驟401,繼續(xù)判斷;步驟402、為當(dāng)前獲取的數(shù)據(jù)包在第一緩沖池中申請(qǐng)空間,如果申請(qǐng)成功,則執(zhí)行步驟406,否則,執(zhí)行步驟403;步驟403、為當(dāng)前獲取的數(shù)據(jù)包在下一緩沖池中申請(qǐng)空間,如果申請(qǐng)成功,則執(zhí)行步驟406;否則,則執(zhí)行步驟404;如果有多塊緩沖池,且在第二塊緩沖池中沒(méi)有申請(qǐng)成功空間,則在步驟403之后還要判斷是否還有緩沖池,若有,則返回步驟403,若沒(méi)有,則執(zhí)行步驟404;步驟404、根據(jù)上述的公式(3)和公式(4)預(yù)測(cè)當(dāng)前網(wǎng)絡(luò)帶寬RTTcur,并根據(jù)上述公式(5)獲取等待時(shí)間T;步驟405、經(jīng)過(guò)上述等待時(shí)間T后,返回步驟402;步驟406、判斷發(fā)送隊(duì)列是否滿,如果發(fā)送隊(duì)列滿,則執(zhí)行步驟407;否則,執(zhí)行步驟409;步驟407、根據(jù)上述的公式(3)和公式(4)預(yù)測(cè)當(dāng)前網(wǎng)絡(luò)帶寬RTTcur,并根據(jù)上述公式(5)獲取等待時(shí)間T;步驟408、經(jīng)過(guò)步驟407獲得的等待時(shí)間T后,返回步驟406;步驟409、將所述的當(dāng)前獲取數(shù)據(jù)包的索引作為一個(gè)任務(wù)節(jié)點(diǎn)發(fā)送給發(fā)送隊(duì)列,由發(fā)送數(shù)據(jù)線程完成發(fā)送,并返回步驟401;本線程返回步驟401后,繼續(xù)獲取新的圖像數(shù)據(jù)包,并將其加入發(fā)送隊(duì)列,這種周而復(fù)始地高效地分配數(shù)據(jù)包的方法,能夠充分利用網(wǎng)絡(luò)的帶寬,并最大限度的減少數(shù)據(jù)包的等待時(shí)間,因此能獲得很好的圖像數(shù)據(jù)發(fā)送效果。
本發(fā)明的發(fā)送數(shù)據(jù)線程與現(xiàn)有技術(shù)二的發(fā)送數(shù)據(jù)線程相同,如圖3所示,該線程包括以下步驟
步驟301從發(fā)送隊(duì)列中獲取發(fā)送任務(wù)節(jié)點(diǎn);步驟302從緩沖池中讀取步驟301中獲取任務(wù)節(jié)點(diǎn)所對(duì)應(yīng)的數(shù)據(jù)包;步驟303發(fā)送步驟302中讀取的數(shù)據(jù)包;步驟304釋放步驟303中所述數(shù)據(jù)包所占緩沖池的空間;步驟305在發(fā)送隊(duì)列中釋放所述任務(wù)節(jié)點(diǎn)。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明所述的方法還可適用于其他帶寬不穩(wěn)定的數(shù)據(jù)的發(fā)送方式,例如互聯(lián)網(wǎng)(Internet)上數(shù)據(jù)的發(fā)送。本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉該技術(shù)的人在本發(fā)明所揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種預(yù)測(cè)帶寬的數(shù)據(jù)發(fā)送方法,包括獲取數(shù)據(jù)線程和發(fā)送數(shù)據(jù)線程,其特征在于,在發(fā)送設(shè)備的內(nèi)存中開(kāi)辟空間大小不同的至少兩塊緩沖池,所述的獲取數(shù)據(jù)線程包括以下步驟A、判斷是否有數(shù)據(jù)包要發(fā)送,如果有,則獲取一個(gè)要發(fā)送的數(shù)據(jù)包;否則,返回步驟A,繼續(xù)判斷;B、為所獲取的數(shù)據(jù)包在第一緩沖池中申請(qǐng)空間,如果申請(qǐng)成功,則執(zhí)行步驟F,否則,執(zhí)行步驟C;C、為所獲取的數(shù)據(jù)包在下一個(gè)緩沖池中申請(qǐng)空間,如果申請(qǐng)成功,則執(zhí)行步驟F;否則,則執(zhí)行步驟D;D、判斷是否還有緩沖池,若有,則返回步驟C,若沒(méi)有,則執(zhí)行步驟E;E、獲取等待時(shí)間,經(jīng)過(guò)該等待時(shí)間后,返回步驟B;F、判斷發(fā)送隊(duì)列是否滿,如果滿,則執(zhí)行步驟G;否則,執(zhí)行步驟H;G、獲取等待時(shí)間,經(jīng)過(guò)該等待時(shí)間后,返回步驟F;H、將所獲取的數(shù)據(jù)包自身的索引作為一個(gè)任務(wù)節(jié)點(diǎn)發(fā)送給發(fā)送隊(duì)列,由發(fā)送數(shù)據(jù)線程完成數(shù)據(jù)包的發(fā)送,并返回步驟A。
2.如權(quán)利要求1所述的方法,其特征在于,所述緩沖池為兩塊大小不同的緩沖池,且大緩沖池空間大小為在數(shù)據(jù)發(fā)送過(guò)程中最大數(shù)據(jù)包的大小。
3.如權(quán)利要求2所述的方法,其特征在于,所述小緩沖池空間大小為大緩沖池空間大小的一半。
4.如權(quán)利要求1所述的方法,其特征在于,所述獲取等待時(shí)間的方法為預(yù)測(cè)當(dāng)前網(wǎng)絡(luò)帶寬,再根據(jù)T=sizeof(data)×RTTcur/2n計(jì)算等待時(shí)間,其中,T為等待時(shí)間,sizeof(data)為發(fā)送隊(duì)列中所有數(shù)據(jù)包的字節(jié)數(shù)之和,n為發(fā)送隊(duì)列的節(jié)點(diǎn)數(shù),RTTcur為當(dāng)前網(wǎng)絡(luò)帶寬。
5.如權(quán)利要求4所述的方法,其特征在于,所述的當(dāng)前網(wǎng)絡(luò)帶寬為發(fā)送當(dāng)前數(shù)據(jù)包時(shí)的網(wǎng)絡(luò)帶寬。
6.如權(quán)利要求4所述的方法,其特征在于,所述預(yù)測(cè)當(dāng)前網(wǎng)絡(luò)帶寬的方法為根據(jù)RTTcur=α×RTTprev1+(1-α)×RTTprev2迭代獲取當(dāng)前網(wǎng)絡(luò)帶寬,其中,RTTprev1為發(fā)送上一個(gè)數(shù)據(jù)包時(shí)的網(wǎng)絡(luò)帶寬,RTTprev2為發(fā)送上上個(gè)數(shù)據(jù)包時(shí)的網(wǎng)絡(luò)帶寬,α為權(quán)重系數(shù)。
7.如權(quán)利要求6所述的方法,其特征在于,所述權(quán)重系數(shù)的取值范圍介于0到1之間。
8.如權(quán)利要求6所述的方法,其特征在于,所述RTTcur的計(jì)算中,最初兩個(gè)RTT的值為發(fā)送數(shù)據(jù)包所用的時(shí)間/該數(shù)據(jù)包的總字節(jié)數(shù)。
9.如權(quán)利要求1所述的方法,其特征在于,所述的發(fā)送數(shù)據(jù)線程利用傳輸控制協(xié)議TCP實(shí)現(xiàn)。
全文摘要
本發(fā)明公開(kāi)了一種預(yù)測(cè)帶寬的數(shù)據(jù)發(fā)送方法,包括獲取數(shù)據(jù)線程和發(fā)送數(shù)據(jù)線程,該方法在內(nèi)存中開(kāi)辟空間大小不同的多塊緩沖池,獲取數(shù)據(jù)線程首先獲取當(dāng)前要發(fā)送的數(shù)據(jù)包,為該數(shù)據(jù)包在第一緩沖池中申請(qǐng)空間,如果申請(qǐng)不成功,則為該數(shù)據(jù)包在第二緩沖池中申請(qǐng)空間,如果申請(qǐng)還不成功,則獲取等待時(shí)間,經(jīng)過(guò)該等待時(shí)間后,再重新申請(qǐng)緩沖池;如果申請(qǐng)成功,則判斷發(fā)送隊(duì)列是否滿,如果發(fā)送隊(duì)列滿,則獲取等待時(shí)間,經(jīng)過(guò)該等待時(shí)間后,重新判斷發(fā)送隊(duì)列是否滿,如果不滿,則將所述的當(dāng)前獲取數(shù)據(jù)包的索引作為一個(gè)任務(wù)節(jié)點(diǎn)發(fā)送給發(fā)送隊(duì)列,由發(fā)送數(shù)據(jù)線程完成數(shù)據(jù)包的發(fā)送。利用該方法可提高數(shù)據(jù)發(fā)送的實(shí)時(shí)性和連續(xù)性,提高數(shù)據(jù)的發(fā)送效率。
文檔編號(hào)H04L12/56GK1630290SQ200310121859
公開(kāi)日2005年6月22日 申請(qǐng)日期2003年12月19日 優(yōu)先權(quán)日2003年12月19日
發(fā)明者顏毅強(qiáng), 孫成昆, 趙牧, 趙俊先 申請(qǐng)人:聯(lián)想(北京)有限公司