• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種使用環(huán)形緩存和環(huán)形隊列實現(xiàn)UDP高效并發(fā)的方法

      2016-07-25 02:15:57孫明剛積成電子股份有限公司山東濟南250100
      中國新技術(shù)新產(chǎn)品 2016年11期

      孫明剛(積成電子股份有限公司,山東 濟南 250100)

      ?

      一種使用環(huán)形緩存和環(huán)形隊列實現(xiàn)UDP高效并發(fā)的方法

      孫明剛
      (積成電子股份有限公司,山東 濟南 250100)

      摘 要:本方法涉及UDP并發(fā)技術(shù)領(lǐng)域,尤其涉及一種使用環(huán)形緩存和環(huán)形隊列實現(xiàn)UDP高效并發(fā)的方法。特點如下:在數(shù)據(jù)接收線程中創(chuàng)建環(huán)形隊列,用于存儲待返回數(shù)據(jù)的客戶端標(biāo)識,并在數(shù)據(jù)處理子線程創(chuàng)建發(fā)送環(huán)形緩存和接收環(huán)形緩存,用于接收數(shù)據(jù)和存儲待發(fā)送數(shù)據(jù);數(shù)據(jù)接收線程在接收數(shù)據(jù)的同時查看環(huán)形隊列中是否有需返回數(shù)據(jù)的客戶端標(biāo)識,如由相應(yīng)數(shù)據(jù)處理子線程發(fā)送環(huán)形緩存中的數(shù)據(jù)發(fā)送出去。本方法的循環(huán)緩沖區(qū)可以提供對緩沖區(qū)的互斥訪問,因而數(shù)據(jù)接收線程與數(shù)據(jù)處理子線程之間不需要加互斥保護(hù),可同時進(jìn)行,從而有了良好的并發(fā)性能,循環(huán)緩沖區(qū)可以更好地利用系統(tǒng)內(nèi)存資源。

      關(guān)鍵詞:環(huán)行緩存;環(huán)形隊列;并發(fā)性能

      一、一種使用環(huán)形緩存和環(huán)形隊列實現(xiàn)UDP高效并發(fā)的方法

      (一)主要步驟

      1 發(fā)起服務(wù)端的數(shù)據(jù)接收線程,創(chuàng)建環(huán)形隊列。

      3 創(chuàng)建與該客戶端對應(yīng)的數(shù)據(jù)處理子線程,并創(chuàng)建該子線程的發(fā)送環(huán)形緩存和接收環(huán)形緩存。

      4 數(shù)據(jù)接收線程將收到的數(shù)據(jù)復(fù)制到相應(yīng)數(shù)據(jù)處理子線程的接收環(huán)形緩存中。

      6 數(shù)據(jù)接收線程在接收數(shù)據(jù)的同時,查看環(huán)形隊列中是否有需返回數(shù)據(jù)的客戶端標(biāo)識,如有則將該標(biāo)識出隊列,由該標(biāo)識索引到相應(yīng)客戶端的數(shù)據(jù)處理子線程,并將該數(shù)據(jù)處理子線程發(fā)送環(huán)形緩存中的數(shù)據(jù)發(fā)送出去。

      (二)主要特征

      圖1

      二、背景技術(shù)

      UDP是用戶數(shù)據(jù)包協(xié)議的簡稱,是OSI(Open System Interconnection,開放式系統(tǒng)互聯(lián))參考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù)。目前,UDP實現(xiàn)并發(fā)有以下三種方法:

      (一)循環(huán)方式

      創(chuàng)建一個套接字,將它綁定到一個端口上,并在這個端口上接收請求,進(jìn)入無限循環(huán),在該循環(huán)中服務(wù)器接受來自客戶的下一個請求,處理這一請求,然后將這個應(yīng)答發(fā)回給客戶。這種模式對于處理請求占用時間較長,效率比較低下。我們考慮像文件傳送這樣的服務(wù),它在處理每一個請求時,要求有相當(dāng)可觀的時間,假設(shè)聯(lián)系該服務(wù)器的第一個客戶要求傳送一個巨大的文件,而聯(lián)系到該服務(wù)器的第二個客戶要求傳送一個小文件,若服務(wù)器一直等到第一個文件傳送完畢才考慮傳送第二個文件,那么第二個客戶將為了一個小文件而等一段不合理的時間。

      (二)創(chuàng)建主線程接收請求

      創(chuàng)建數(shù)據(jù)處理子線程單獨處理接收到的數(shù)據(jù),并將處理結(jié)果發(fā)回給客戶端。設(shè)計思想,發(fā)起一個主線程從指定端口接收數(shù)據(jù),當(dāng)接收到數(shù)據(jù)時,創(chuàng)建對應(yīng)的數(shù)據(jù)處理線程,將該數(shù)據(jù)交由該線程處理,處理結(jié)束后將數(shù)據(jù)發(fā)回客戶端,之后數(shù)據(jù)處理線程退出。線程創(chuàng)建和銷毀費時較長,因為創(chuàng)建一個線程要獲取內(nèi)存資源或者其它更多資源,所以提高服務(wù)程序效率的一個手段就是盡可能地減少創(chuàng)建和銷毀線程的次數(shù)。如果數(shù)據(jù)交互比較頻繁,這種方法性能較低。

      (三)主線程監(jiān)聽客戶請求

      刮耳崖前傳令急,霹靂一聲千騎入。弓刀匼匝網(wǎng)周遭,罪人黜伏將焉逃?鐵籠盛之負(fù)以斧,駭汗淋漓寫如雨。從征土目凡數(shù)千,咸使觀睹爭駢闐。穴中誰敢萌反復(fù),請視今朝索諾木。遠(yuǎn)人從此識天威,愿萬萬古安邊陲。[3]65

      有請求到來時,記下其IP和端口,然后創(chuàng)建一個子線程將IP和端口傳給子線程,由子線程負(fù)責(zé)與該客戶端通信。這是目前常用的方法,但此方法最大的問題在于:子線程會新建套接字,并綁定一個新端口與客戶端通信,如果客戶端指定從服務(wù)器某一端口接收數(shù)據(jù),會造成客戶端接收失敗。

      圖2

      三、關(guān)于方案

      針對上述問題,本方法提供了一種使用環(huán)形緩存和環(huán)形隊列實現(xiàn)UDP高效并發(fā)的解決方案。

      (一)一種使用環(huán)形緩存和環(huán)形隊列實現(xiàn)UDP高效并發(fā)的方法主要步驟

      1 發(fā)起服務(wù)端的數(shù)據(jù)接收線程,創(chuàng)建環(huán)形隊列。

      3 創(chuàng)建與該客戶端對應(yīng)的數(shù)據(jù)處理子線程,并創(chuàng)建該子線程的發(fā)送環(huán)形緩存和接收環(huán)形緩存。

      4 數(shù)據(jù)接收線程將收到的數(shù)據(jù)復(fù)制到相應(yīng)數(shù)據(jù)處理子線程的接收環(huán)形緩存中。

      數(shù)據(jù)處理子線程在其接收環(huán)形緩存中接收數(shù)據(jù),如果接收環(huán)形緩存中有數(shù)據(jù),數(shù)據(jù)處理子線程處理數(shù)據(jù),處理完后將需要發(fā)送的數(shù)據(jù)復(fù)制到其發(fā)送環(huán)形緩存中,并將其對應(yīng)的客戶端標(biāo)識存到數(shù)據(jù)接收線程的環(huán)形隊列中。

      數(shù)據(jù)接收線程在接收數(shù)據(jù)的同時,查看環(huán)形隊列中是否有需返回數(shù)據(jù)的客戶端標(biāo)識,如有則將該標(biāo)識出隊列,由該標(biāo)識索引到相應(yīng)客戶端的數(shù)據(jù)處理子線程,并將該數(shù)據(jù)處理子線程發(fā)送環(huán)形緩存中的數(shù)據(jù)發(fā)送出去。

      執(zhí)行步驟1前需先為數(shù)據(jù)接收線程創(chuàng)建套接字并綁定一端口,固定從服務(wù)器的這一個端口接收來自客戶端的數(shù)據(jù)。

      (二)本方法的有益效果

      1 循環(huán)緩沖區(qū)可以提供對緩沖區(qū)的互斥訪問,因而數(shù)據(jù)接收線程與數(shù)據(jù)處理子線程之間不需要加互斥保護(hù),可同時進(jìn)行,從而有了良好的并發(fā)性能,循環(huán)緩沖區(qū)可以更好地利用系統(tǒng)內(nèi)存資源。

      2 使用環(huán)形隊列存儲需要發(fā)送數(shù)據(jù)的客戶端標(biāo)識,如果有需要發(fā)送數(shù)據(jù)的客戶端則可直接從中取出,不需遍歷所有客戶端,有效減少CPU空轉(zhuǎn)時間,提高CPU利用率。

      3 數(shù)據(jù)的接收與發(fā)送使用一個套接字和一個接收線程即可實現(xiàn),可以大大減少系統(tǒng)頻繁創(chuàng)建線程的資源開銷,節(jié)約套接字(文件描述符)占用,并可有效避免因新建線程重新綁定端口造成的客戶端接收失敗現(xiàn)象。

      4 數(shù)據(jù)接收和數(shù)據(jù)處理分離設(shè)計,可以使用不同的優(yōu)先級來確保數(shù)據(jù)可靠、完整、實時的接收,并符合軟件工程中的“高內(nèi)聚、低耦合”設(shè)計思想。

      附圖說明:圖1是本方法數(shù)據(jù)接收發(fā)送主線程的流程圖,圖2是本方法數(shù)據(jù)處理子線程的流程圖。

      (三)方案具體實施方式

      下面結(jié)合附圖對本方法的實施過程進(jìn)行詳細(xì)說明:一種使用環(huán)形緩存和環(huán)形隊列實現(xiàn)UDP高效并發(fā)的方法,如圖所示,包括以下步驟:

      1 為數(shù)據(jù)接收線程創(chuàng)建套接字并綁定一端口,發(fā)起服務(wù)端的數(shù)據(jù)接收線程,創(chuàng)建環(huán)形隊列。

      3 創(chuàng)建與該客戶端對應(yīng)的數(shù)據(jù)處理子線程,在子線程的構(gòu)造函數(shù)中實現(xiàn)發(fā)送環(huán)形緩存的創(chuàng)建和接收環(huán)形緩存的創(chuàng)建。

      4 數(shù)據(jù)接收線程將收到的數(shù)據(jù)復(fù)制到相應(yīng)數(shù)據(jù)處理子線程的接收環(huán)形緩存中。

      5 數(shù)據(jù)處理子線程在其接收環(huán)形緩存中接收數(shù)據(jù),如果接收環(huán)形緩存中有數(shù)據(jù),數(shù)據(jù)處理子線程處理數(shù)據(jù),處理完后將需要發(fā)送的數(shù)據(jù)復(fù)制到其發(fā)送環(huán)形緩存中,并將其對應(yīng)的客戶端標(biāo)識存到數(shù)據(jù)接收線程的環(huán)形隊列中。

      6 數(shù)據(jù)接收線程在接收數(shù)據(jù)的同時,每接收完一幀數(shù)據(jù)后去環(huán)形隊列中查看是否有需返回數(shù)據(jù)的客戶端標(biāo)識,如有則將該標(biāo)識出隊列,由該標(biāo)識索引到相應(yīng)客戶端的數(shù)據(jù)處理子線程,并將該數(shù)據(jù)處理子線程發(fā)送環(huán)形緩存中的數(shù)據(jù)發(fā)送出去。

      參考文獻(xiàn)

      [1]蘆東昕,張華強,王陳.基于UDP的可靠數(shù)據(jù)傳遞技術(shù)研究[J].計算機工程,2003(22):62-63.

      [2]劉捷,龔根華,饒泓,陶俊才.基于UDP的新型數(shù)據(jù)傳輸協(xié)議[J].南昌大學(xué)學(xué)報(理科版),2006(5):496-499+503.

      [3]王艷芳,戴永,劉東華,孔華威,曾艷艷.基于UDP的數(shù)據(jù)可靠傳輸技術(shù)研究與應(yīng)用[J].計算機工程與應(yīng)用,2010(3):10 5-108.

      中圖分類號:TP391

      文獻(xiàn)標(biāo)識碼:A

      通信地址2 數(shù)據(jù)接收線程在指定端口接收數(shù)據(jù),如果收到合法數(shù)據(jù),通過數(shù)據(jù)中的來判斷是否已經(jīng)存在相應(yīng)客戶端的數(shù)據(jù)處理子線程,如果存在,則直接執(zhí)行步驟4;如果不存在,則先執(zhí)行步驟3創(chuàng)建新的數(shù)據(jù)處理子線程,之后再執(zhí)行步驟4。 其主要特征在于執(zhí)行步驟1前需要先為數(shù)據(jù)接收線程創(chuàng)建套接字并綁定一端口。所述數(shù)據(jù)中的是指數(shù)據(jù)中包含的源客戶端的IP地址或設(shè)備的 2 數(shù)據(jù)接收線程在指定端口接收數(shù)據(jù),如果收到合法數(shù)據(jù),通過數(shù)據(jù)中的來判斷是否已經(jīng)存在相應(yīng)客戶端的數(shù)據(jù)處理子線程,如果存在,則直接執(zhí)行步驟4;如果不存在,則先執(zhí)行步驟3創(chuàng)建新的數(shù)據(jù)處理子線程,之后再執(zhí)行步驟4。 所述數(shù)據(jù)中的是指數(shù)據(jù)中包含的源客戶端的IP地址或設(shè)備的 2 數(shù)據(jù)接收線程在綁定端口接收數(shù)據(jù),如果收到合法數(shù)據(jù),通過數(shù)據(jù)中的(指數(shù)據(jù)中包含的源客戶端的IP地址或設(shè)備的 。數(shù)據(jù)合法與否是根據(jù)數(shù)據(jù)的起始字符、結(jié)束字符、長度和校驗碼綜合判斷。 。通信過程中可以利用這一地址來識別各客戶端。數(shù)據(jù)合法與否是根據(jù)數(shù)據(jù)的起始字符、結(jié)束字符、長度和校驗碼綜合判斷。[0011]本方法使用通信程序中經(jīng)常用到的環(huán)形緩存作為數(shù)據(jù)結(jié)構(gòu),來存放通信中各客戶端發(fā)送和接收的數(shù)據(jù),環(huán)形緩存是一個先進(jìn)先出的循環(huán)緩沖區(qū),可以向通信程序提供對緩存的互斥訪問。使用環(huán)形隊列結(jié)構(gòu)來存儲每一個需要在數(shù)據(jù)處理完后發(fā)送返回結(jié)果的客戶端標(biāo)識。這兩種數(shù)據(jù)結(jié)構(gòu)的配合使用可以實現(xiàn)高效的UDP并發(fā)。 )來判斷是否已經(jīng)存在相應(yīng)客戶端的數(shù)據(jù)處理子線程,如果存在,則直接執(zhí)行步驟4;如果不存在,則先執(zhí)行步驟3,創(chuàng)建新的數(shù)據(jù)處理子線程,之后再執(zhí)行步驟4。數(shù)據(jù)合法性判斷是根據(jù)數(shù)據(jù)的起始字符、結(jié)束字符、長度和校驗碼綜合判斷。

      沙河市| 鲁山县| 哈尔滨市| 浦东新区| 兖州市| 五峰| 衡阳县| 城市| 柘荣县| 淄博市| 封开县| 阳曲县| 赞皇县| 佳木斯市| 竹北市| 吉木乃县| 武清区| 漳平市| 厦门市| 平遥县| 修文县| 邹平县| 呼图壁县| 绵阳市| 泰安市| 玛沁县| 桃江县| 南乐县| 安丘市| 安平县| 临沧市| 日照市| 张掖市| 进贤县| 苗栗县| 浮山县| 乐山市| 铁岭市| 南投市| 荃湾区| 咸宁市|