亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種數據發(fā)送方法及系統(tǒng)與流程

文檔序號:11930215閱讀:222來源:國知局
一種數據發(fā)送方法及系統(tǒng)與流程

本發(fā)明涉及通信技術領域,尤其涉及一種數據發(fā)送方法及系統(tǒng)。



背景技術:

目前,網絡上的兩個程序通過一個雙向的通信連接實現(xiàn)數據的交換,這個連接的一端稱為一個socket。建立網絡通信連接至少需要一對端口號(socket)。socket本質是編程接口對TCP/IP的封裝,TCP/IP也要提供可供程序員做網絡開發(fā)所用的接口,這就是socket編程接口,例如HTTP是轎車,提供了封裝或者顯示數據的具體形式,而Socket是發(fā)動機,提供了網絡通信的能力。socket通常也稱作"套接字",用于描述IP地址和端口,是一個通信鏈的句柄,可以用來實現(xiàn)不同虛擬機或不同計算機之間的通信。在互聯(lián)網上的主機一般運行了多個服務軟件,同時提供多種服務,每種服務都打開一個socket,并綁定到一個端口上,不同的端口對應于不同的服務,應用程序通常通過"套接字"向網絡發(fā)出請求或者應答網絡請求。

現(xiàn)有技術中,單個連接使用獨立的socket,相同的數據發(fā)往多個socket連接時,獨立處理,互不干涉。例如,互相幾個獨立的socket,假設它們都是TCP或UDP連接,這時我們需要逐個調用相同的方法將相同的一份數據傳遞給每個socket供其完成協(xié)議棧工作再通過網絡接口發(fā)送。然而當把相同的數據同時發(fā)送到多個連接時,每個連接獨立處理的步驟里,有些部分是重復處理,例如:TCP校驗和計算;有些部分是冗余處理,例如:每個連接獨立分片,申請/占用各自的緩存;這樣當把一份相同的數據發(fā)往多個連接時,由于重復處理和冗余處理的存在,會造成系統(tǒng)非必要的額外開銷以及運行功耗。

因此,如何降低一份相同數據發(fā)送給多個鏈接時的系統(tǒng)開銷及運行功耗,提高系統(tǒng)整體的數據處理能力,是本領域技術人員亟待解決的問題。



技術實現(xiàn)要素:

本發(fā)明實施例提供了一種數據發(fā)送方法及系統(tǒng),用以解決現(xiàn)有技術中存在的把一份相同的數據發(fā)往多個連接時,由于重復處理和冗余處理的存在,造成系統(tǒng)非必要的額外開銷以及運行功耗的問題。

本發(fā)明實施例提供了一種數據發(fā)送方法,包括:

主隊列的隊列頭接收待發(fā)送的有效數據,并將所述待發(fā)送的有效數據進行分片處理形成數據包,且將所述數據包傳遞給所述主隊列中的第一個子數據端;其中,所述主隊列包括:隊列頭和多個建立有串行鏈接關系的子數據端;每個所述子數據端用于與接收設備建立連接進行數據處理及發(fā)送;

所述主隊列中的每一個所述子數據端將接收到的所述數據包進行處理及發(fā)送后,傳遞給鏈接的下一個所述子數據端進行處理及發(fā)送,直至所述主隊列的最后一個所述子數據端完成數據處理及發(fā)送。

在一種可能的實施方式中,本發(fā)明實施例提供的上述數據發(fā)送方法中,還包括:

至少一個子隊列的隊列頭復制所述數據包,并將所述數據包傳遞給所述子隊列中的第一個子數據端;其中,所述子隊列包括:隊列頭和多個建立有串行鏈接關系的所述子數據端;所述子隊列的隊列頭與所述主隊列的隊列頭的數量之和小于或等于中央處理器的數量;

所述子隊列中的每一個所述子數據端將接收到的所述數據包進行處理及發(fā)送后,傳遞給鏈接的下一個所述子數據端進行處理及發(fā)送,直至所述子隊列的最后一個所述子數據端完成數據處理及發(fā)送。

在一種可能的實施方式中,本發(fā)明實施例提供的上述數據發(fā)送方法中,還包括:

所述主隊列和所述子隊列中的各所述子數據端,在完成數據處理及發(fā)送后獲取與該所述子數據端鏈接的下一個所述子數據端的信息,并判斷待接收所述數據包的子數據端是否具有對所述數據包進行處理及發(fā)送的能力,是則將所述數據包發(fā)送給所述子數據端進行處理及發(fā)送;否則將所述子數據端移動到該所述子數據端所在隊列的隊尾并標記,所述子數據端繼續(xù)判斷下一個待接收數據包的子數據端是否具有對所述數據包進行處理及發(fā)送的能力,直至判斷出具有對所述數據包進行處理及發(fā)送能力的子數據端,將所述數據包發(fā)送給該所述子數據端進行處理及發(fā)送。

在一種可能的實施方式中,本發(fā)明實施例提供的上述數據發(fā)送方法中,還包括:

所述主隊列中各所述子數據端將數據發(fā)送結果,反饋給所述主隊列的隊列頭。

在一種可能的實施方式中,本發(fā)明實施例提供的上述數據發(fā)送方法中,還包括:

各所述子隊列中的各所述子數據端將數據發(fā)送結果,反饋給各自所在的所述子隊列的隊列頭;

各所述子隊列的隊列頭將獲得的所述反饋結果匯總,并發(fā)送給所述主隊列的隊列頭。

本發(fā)明實施例提供了一種數據發(fā)送系統(tǒng),包括:預先建立的用于處理及發(fā)送有效數據的主隊列;其中,所述主隊列包括:隊列頭和多個建立有串行鏈接關系的子數據端;每個所述子數據端用于與接收設備建立連接進行數據處理及發(fā)送;

所述主隊列中的隊列頭用于接收待發(fā)送的有效數據,并將所述待發(fā)送的有效數據進行分片處理形成數據包,且將所述數據包傳遞給所述主隊列中的第一個所述子數據端;

所述主隊列中的每一個所述子數據端用于將接收到的所述數據包進行處理及發(fā)送后,傳遞給鏈接的下一個所述子數據端進行處理及發(fā)送,直至所述主隊列的最后一個所述子數據端完成數據處理及發(fā)送。

在一種可能的實施方式中,本發(fā)明實施例提供的上述數據發(fā)送系統(tǒng)中,還包括:至少一個子隊列;所述子隊列包括:隊列頭和多個建立有串行連接關系的所述子數據端;所述子隊列的隊列頭與所述主隊列的隊列頭的數量之和小于或等于中央處理器的數量;

所述子隊列的隊列頭用于復制所述數據包,并將所述數據包傳遞給所述子隊列中的第一個所述子數據端;

所述子隊列中的每一個所述子數據端用于將接收到的所述數據包進行處理及發(fā)送后,傳遞給鏈接的下一個所述子數據端進行處理及發(fā)送,直至所述子隊列的最后一個所述子數據端完成數據處理及發(fā)送。

在一種可能的實施方式中,本發(fā)明實施例提供的上述數據發(fā)送系統(tǒng)中,各所述子數據端還用于:

在完成數據處理及發(fā)送后獲取與該所述子數據端鏈接的下一個所述子數據端的信息,并判斷待接收所述數據包的子數據端是否具有對所述數據包進行處理及發(fā)送的能力,是則將所述數據包發(fā)送給所述子數據端進行處理及發(fā)送;否則將所述子數據端移動到該所述子數據端所在隊列的隊尾并標記,所述子數據端繼續(xù)判斷下一個待接收數據包的子數據端是否具有對所述數據包進行處理及發(fā)送的能力,直至判斷出具有對所述數據包進行處理及發(fā)送能力的子數據端,將所述數據包發(fā)送給該所述子數據端進行處理及發(fā)送。

在一種可能的實施方式中,本發(fā)明實施例提供的上述數據發(fā)送系統(tǒng)中,所述主隊列的各所述子數據端,還用于:

將數據發(fā)送結果,反饋給所述主隊列的隊列頭。

在一種可能的實施方式中,本發(fā)明實施例提供的上述數據發(fā)送系統(tǒng)中,所述子隊列的各所述子數據端,還用于:

將數據發(fā)送結果,反饋給各自所在的所述子隊列的隊列頭;

各所述子隊列的隊列頭將獲得的所述反饋結果匯總,并發(fā)送給所述主隊列的隊列頭。

在一種可能的實施方式中,本發(fā)明實施例提供的上述數據發(fā)送系統(tǒng)中,還包括:創(chuàng)建模塊;

所述創(chuàng)建模塊用于創(chuàng)建接收及發(fā)送有效數據的主隊列。

在一種可能的實施方式中,本發(fā)明實施例提供的上述數據發(fā)送系統(tǒng)中,所述創(chuàng)建模塊,具體用于:

創(chuàng)建主隊列的隊列頭和子數據端;

判斷所述子數據端是否滿足鏈接到所述主隊列的隊列頭的約束條件,是則判斷所述主隊列的隊列長度是否大于預設閾值,確定所述主隊列的隊列長度小于所述預設閾值時則將所述子數據端鏈接到所述主隊列;否則拒絕鏈接所述子數據端到所述主隊列。

在一種可能的實施方式中,本發(fā)明實施例提供的上述數據發(fā)送系統(tǒng)中,所述創(chuàng)建模塊,還用于:

確定所述主隊列的隊列長度不小于所述預設閾值時,依次判斷各所述子隊列是否小于預設閾值;

若確定出一個小于所述預設閾值的所述子隊列,則將所述子數據端鏈接到所述子隊列;

若確定各所述子隊列的隊列長度不小于所述預設閾值,則判斷所述子隊列頭的隊列頭與所述主隊列的隊列頭的數量之和是否大于所述中央處理器的數量,是則將所述子數據端鏈接到隊列長度最小的隊列中;否則創(chuàng)建一個新的子隊列,將所述子數據端鏈接到新的所述子隊列中。

本發(fā)明實施例的有益效果包括:

本發(fā)明實施例提供了一種數據發(fā)送方法及系統(tǒng),該數據發(fā)送方法包括:主隊列的隊列頭接收待發(fā)送的有效數據,并將待發(fā)送的有效數據進行分片處理形成數據包,且將數據包傳遞給主隊列中的第一個子數據端;其中,主隊列包括:隊列頭和多個建立有串行鏈接關系的子數據端;每個子數據端用于與接收設備建立連接進行數據處理及發(fā)送;主隊列中的每一個子數據端將接收到的數據包進行處理及發(fā)送后,傳遞給鏈接的下一個子數據端進行處理及發(fā)送,直至主隊列的最后一個子數據端完成數據處理及發(fā)送。這樣,將一份相同的數據(例如:某幀視頻數據,某張圖片)同時發(fā)送給多個連接時,只需要進行一次數據分片處理及相應操作,形成對應的數據包并依次傳遞各子數據端進行數據發(fā)送。因此本發(fā)明實施例提供的數據發(fā)送方法,相對于現(xiàn)有技術不需要每個連接單獨處理TCP校驗和計算,也不需要每個連接獨立進行分片處理占用各自的緩存,從而可以減少對有效數據的重復操作和冗余操作,降低系統(tǒng)的額外開銷,提高系統(tǒng)整體處理能力,也有利于降低嵌入式設備的運行功耗。

附圖說明

圖1為本發(fā)明實施例提供的數據發(fā)送方法的流程圖;

圖2為本發(fā)明實施例提供的隊列調整示意圖;

圖3a和圖3b分別為本發(fā)明實施例提供的數據發(fā)送過程示意圖;

圖4為本發(fā)明實施例提供的具體的數據發(fā)送方法流程圖;

圖5為本發(fā)明實施例提供的隊列的創(chuàng)建方法流程圖。

具體實施方式

下面結合附圖,對本發(fā)明實施例提供的數據發(fā)送方法及系統(tǒng)的具體實施方式進行詳細的說明。

本發(fā)明實施例提供了一種數據發(fā)送方法,如圖1所示,可以包括以下步驟:

S101、主隊列的隊列頭接收待發(fā)送的有效數據,并將待發(fā)送的有效數據進行分片處理形成數據包,且將數據包傳遞給主隊列中的第一個子數據端;

其中,主隊列包括:隊列頭和多個建立有串行鏈接關系的子數據端;每個子數據端用于與接收設備建立連接進行數據處理及發(fā)送;

S102、主隊列中的每一個子數據端將接收到的數據包進行處理及發(fā)送后,傳遞給鏈接的下一個子數據端進行處理及發(fā)送,直至主隊列的最后一個子數據端完成數據處理及發(fā)送。

本發(fā)明實施例提供的上述數據發(fā)送方法中,通過預先創(chuàng)建的主隊列可以進行隊列式發(fā)送數據,其中主隊列的隊列頭為一個socket端口,以下實施例中均以sockQH表示,子數據端為用于建立連接的socket端口,以下實施例中由sockX表示,其與現(xiàn)有技術相同。該sockQH為一個特殊的socket,可以設定sockQH的協(xié)議族名稱為PF_SockQH(PF:Protocol Family),它不和具體網絡協(xié)議族綁定,但是它具有鏈接到它隊列里的子數據端使用的網絡協(xié)議族的公共特征屬性,內存資源管理等;例如,最佳的最大傳輸單元MTU(Maximum Transmission Unit)值,即適合隊列里所有sockX的MTU值,此值會影響如何對待發(fā)送的數據進行分片;是否需要計算分片數據的校驗和,如果隊列里的某個sockX是TCP連接,那么可能需要計算每個分片負載數據的校驗和;緩存和重用分片和描述的內存資源。

在應用模塊將待發(fā)送數據通過發(fā)送接口啟動發(fā)送后,通過上述主隊列實現(xiàn)隊列式發(fā)送。首先依據sockQH的公共屬性實現(xiàn)對數據進行分片處理,以及生成對每個分片的描述等操作,待發(fā)送數據處理后的分片和描述一起形成一個數據包,具體地,依據sockQH的公共屬性將有效數據進行分片,為每個分片準備一個獨立的描述,所有的分片和描述合為一個數據包,同時完成每個分片的預處理;此處分片的大小依據隊列里所有sockX的MSS值;每對分片和描述僅在此處分配,后續(xù)每個sockX都共享使用它們,達到降低資源分配開銷的目的;此處預處理依據隊列里所有sockX的屬性,例如是否需要計算每個分片有效數據的校驗和,供隊列里每個sockX共享使用此值,無需每個sockX再次計算校驗和,計算量最小化,達到提高性能及降低功耗的目的。需要說明的是,因為有效數據太大,因此網絡協(xié)議棧會對齊進行分片處理,分片大小值為MSS(Message Segment Size),例如:某TCPv4的MSS值是1500減去N-Bytes,因為它的傳輸鏈路是Ethernet,又因為Ethernet的MTU值設置為1500這個值,所以為了確保經過TCPv4處理后報文不再發(fā)送時再次分片處理,此處MSS+N-Bytes=MTU,其中N-Bytes是TCPv4協(xié)議棧數據頭需要的大小。

這樣本發(fā)明實施例提供的上述數據發(fā)送方法,將一份相同的數據(例如:某幀視頻數據,某張圖片)同時發(fā)送給多個連接時,只需要進行一次數據分片處理及相應操作,形成對應的數據包并通過各子數據端sockX建立的連接依次進行數據發(fā)送。因此本發(fā)明實施例提供的數據發(fā)送方法,相對于現(xiàn)有技術不需要每個連接單獨處理TCP校驗和計算,也不需要每個連接獨立進行分片處理占用各自的緩存,從而可以減少對有效數據的重復操作和冗余操作,降低系統(tǒng)的額外開銷,提高系統(tǒng)整體處理能力,也有利于降低嵌入式設備的運行功耗。

在具體實施時,本發(fā)明實施例提供的上述數據發(fā)送方法中,還可以包括:

至少一個子隊列的隊列頭復制數據包,并將數據包傳遞給子隊列中的第一個子數據端;其中,子隊列包括:隊列頭和多個建立有串行鏈接關系的子數據端;子隊列的隊列頭與主隊列的隊列頭的數量之和小于或等于中央處理器的數量;

子隊列中的每一個子數據端將接收到的數據包進行處理及發(fā)送后,傳遞給鏈接的下一個子數據端進行處理及發(fā)送,直至子隊列的最后一個子數據端完成數據處理及發(fā)送。

具體地,本發(fā)明實施例提供的上述數據發(fā)送方法中,當加入到主隊列里的sockX數量太多時,已達到主隊列的隊列長度閾值,此時會根據系統(tǒng)運行環(huán)境即中央處理器CPU核心的數量創(chuàng)建至少一個子隊列,主隊列的隊列頭sockQH依然是原來主隊列的隊列頭,相應的還是其它新的子隊列中子隊列頭的隊列頭;其中,主隊列的隊列頭變?yōu)橹麝犃蓄^sockQH[0],子隊列頭則為sockQH[N],N為正整數。新創(chuàng)建的子隊列的數量可以叫隊列高度,依賴系統(tǒng)里CPU核心數量;例如在擁有四個CPU核心的環(huán)境里,隊列高度的最大值等于“4”,即最多可以存在sockQH[0]、sockQH[1]、sockQH[2]sockQH[3]四個隊列,其中sockQH[0]是主隊列頭,其余是子隊列頭。

具體地,子隊列的創(chuàng)建依賴環(huán)境里CPU核心的數量,這樣是為了利用每個CPU核心獨立處理各個隊列,達到并發(fā)處理的效果;此處之所以在主隊列的長度達到閾值之后再創(chuàng)建子隊列,是為了抵消因創(chuàng)建子隊列而產生的額外開銷;主隊列的長度可以是一個預設值的常數(例如:32)。若同一份數據需要發(fā)往更多的連接時,主隊列的的長度已達到閾值,無法再添加更多的sockX,此時通過創(chuàng)建子隊列可以實現(xiàn)將有效數據發(fā)往更多的連接。子隊列與主隊列可以通過不同的CPU處理,多個子隊列頭sockQH[N]由多個不同的CPU處理,即主隊列頭sockQH[0]和每個子隊列頭sockQH[N]都同時在不同的CPU并行處理,主隊列頭sockQH[0]和子隊列頭sockQH[N]的總數量小于等于CPU的數量。每個子隊列頭sockQH[N]克隆數據包中的數據分片,生成對應的描述,從主隊列頭sockQH[0]的對應分片描述里獲取和更新部分公共內容(例如:分片數據的校驗和),形成自己的發(fā)送數據包,進而將數據包傳遞給子隊列中的第一個子數據端,子隊列中的每一個子數據端將接收到的數據包進行處理及發(fā)送后,傳遞給鏈接的下一個子數據端進行處理及發(fā)送,直至子隊列的最后一個子數據端完成數據處理及發(fā)送。

在具體實施時,本發(fā)明實施例提供的上述數據發(fā)送方法中,還包括:

主隊列和子隊列中的各子數據端,在完成數據處理及發(fā)送后獲取與該子數據端鏈接的下一個子數據端的信息,并判斷待接收數據包的子數據端是否具有對數據包進行處理及發(fā)送的能力,是則將數據包發(fā)送給子數據端進行處理及發(fā)送;否則將子數據端移動到該子數據端所在隊列的隊尾并標記,子數據端繼續(xù)判斷下一個待接收數據包的子數據端是否具有對數據包進行處理及發(fā)送的能力,直至判斷出具有對數據包進行處理及發(fā)送能力的子數據端,將數據包發(fā)送給該子數據端進行處理及發(fā)送。

具體地,本發(fā)明實施例提供的上述數據發(fā)送方法中,數據包傳遞過程中,還需要判定待接收數據包的子數據端是否具有處理該數據包的能力,是則將數據包傳遞給當前能處理的發(fā)送連接sockX,暫時無法處理的發(fā)送連接sockX推遲處理。此處主隊列頭sockQH[0]和子隊列頭sockQH[N]在不同的處理器核心并發(fā)處理;此處依次是按照各自列表里成員的順序依次逐個處理;針對每個發(fā)送連接,先檢查它當前是否有單次處理完一個數據包的能力(例如:該連接sockX能夠容納的分片數少于該數據包里的分片數即判斷該連接sockX暫時不能處理);暫時無法處理的發(fā)送連接sockX推遲處理的方式為可以將此連接sockX放置到的末尾,也可以是其它方式如表示待再次處理。

具體地,如圖2所示,其中Desc-N為對應數據分片的描述,Seg-N為數據分片,數據分片與對應的描述合為一個數據包Group-Y。如果sockX暫時沒有單次處理完數據包的能力,那么將sockA從當前位置移動到隊列末尾,并設置標簽表示它在此輪發(fā)送中已經“懶惰”一次;隊列調整后繼續(xù)處理,當再次遇到sockX,如果那時候它已經能單次處理完數據包,那么就交付它處理,如果那時候sockX既已經“懶惰”一次,還不能再次處理,則會跳過此輪處理;sockQH返回給應用的結果里會反應出“懶惰”情況出現(xiàn),應用可以通過命令獲取哪些sockX出現(xiàn)“病情”,采取符合業(yè)務的處理,例如從隊列中摘除某sockX,關閉相應連接等。也可以再次嘗試推遲處理的sockX,能再次處理則處理,不能再次處理依據設置確定其行為:此處依據設置是指某個sockX的獨立設置,例如該sockX設置為“非阻塞(NONBLOCK)”時再次嘗試處理它依然無法處理時即會放棄此sockX的數據發(fā)送;可以將某個sockX設置為“阻塞(BLOCK)”模式,再次嘗試失敗,依然設置為待發(fā)送,放置到待處理的位置;還可以將某個sockX設置為“嘗試數次(Try-N)”模式,即嘗試N次,此模式介于NONBLOCK和BLOCK之間。

在具體實施時,本發(fā)明實施例提供的上述數據發(fā)送方法中,如圖3a和圖3b所示,將數據包傳遞給sockA處理和發(fā)送;sockA開始處理數據包前會獲取它的處理獨占權限,此處理獨占權限表示sockA當前獨占數據包,滿足排它性操作的需求;sockA完成處理及發(fā)送后,釋放處理數據包的獨占權限;sockA完成處理及發(fā)送,將數據包傳遞給sockB處理和發(fā)送;sockB開始處理前獲取處理獨占權限,完成發(fā)送后釋放獨占權限;sockB完成處理及發(fā)送,將數據包傳遞給隊列中后續(xù)sockX處理和發(fā)送;每個sockX開始處理前獲取處理獨占權限,完成發(fā)送后釋放獨占權限,直至隊列中最后一個sockX。其中圖3b中也示意了子隊列實現(xiàn)數據發(fā)送的過程,其實現(xiàn)原理與上述主隊列相同,在此不做詳述。

需要說明的是,在主隊列中,所有sockX完成依賴,則通知sockQH解除依賴;此處所謂的依賴,本質原因來自sockX的協(xié)議棧屬性,例如TCP協(xié)議存在重發(fā)機制,那么當sockX完成處理和發(fā)送后,需要等待連接對端確認才知道是否需要重發(fā)哪些分片,此案中sockA完成處理和發(fā)送后立即會將數據包傳遞給隊列后續(xù)sockB,這么實現(xiàn)為了滿足低時延的應用需求,所以此時sockA在未得到連接對端確認之前,對數據包的所有分片都處于依賴狀態(tài),只有得到連接對端確認時才會解除依賴并通知sockQH;如果需要重發(fā),那么sockA需要再次得到數據包的處理獨占權限,從數據包中挑選必要的分片進行重發(fā),直到最終解除對數據包的依賴;如果sockX的協(xié)議棧屬性無依賴特征,例如UDP協(xié)議即無此依賴,那么sockX處理和發(fā)送完成后,立即可以通知sockQH解除依賴;sockQH檢測到數據包的所有依賴都解除后,才能釋放或再利用數據包里的資源。

在具體實施時,本發(fā)明實施例提供的上述數據發(fā)送方法中,還可以包括:主隊列中各子數據端將數據發(fā)送結果,反饋給主隊列的隊列頭;各子隊列中的各子數據端將數據發(fā)送結果,反饋給各自所在的子隊列的隊列頭;各子隊列的隊列頭將獲得的反饋結果匯總,并發(fā)送給主隊列的隊列頭。具體地,各隊列中已經完成處理發(fā)送數據的連接sockX,將結果反饋給各自的主/子隊列頭sockQH[0]/sockQH[N],必要時申請是否再次處理,即已經處理的發(fā)送連接需要把自己的最終結果反饋給各自的隊列頭,即該數據包在具體某個連接的最終結果,如果成功則同時解除依賴;如果該連接檢測到異常,例如某個分片需要重傳,那么會申請隊列頭再次將此數據包交給該連接處理,直到成功或失敗。子隊列頭匯總自身所有處理結果,并匯總給主隊列頭,所有子隊列的處理結果都匯總到主隊列頭,主隊列頭也必須等待所有子隊列頭反饋所有的處理結果,主隊列頭匯總所有處理結果,并將結果反饋給應用模塊。

下面以一個具體實施例來說明通過隊列實現(xiàn)數據發(fā)送的過程,如圖4所示,可以具體包括:

S21、應用模塊啟動發(fā)送有效數據;

S22、根據主隊列頭的公共屬性對有效數據進行分片處理及操作,形成數據包,克隆數據包中的數據分片并形成對應各子隊列頭的的數據包;

S23、主隊列和各子隊列分別將各自的數據包傳遞給隊列中的第一個子數據端進行處理及發(fā)送,同一隊列的各子數據端依次傳遞,完成數據處理及發(fā)送;暫時無法處理數據的子數據端則推遲處理;

S24、再次將數據包傳遞給推遲處理數據的子數據端,能完成數據處理的則完成數據處理及發(fā)送,不能完成數據處理的則依據設置確定其行為;

S25、判斷所有子數據端連接是否全部完成數據處理及發(fā)送,是則執(zhí)行步驟S26、否則執(zhí)行步驟S24;

S26、完成數據處理及發(fā)送的子數據端將結果反饋給對應的隊列頭,必要時可申請再次處理及發(fā)送數據;各子隊列頭將反饋結果匯總反饋給主隊列頭,主隊列頭將反饋結果匯總反饋給應用模塊。

在具體實施時,本發(fā)明實施例提供的上述數據發(fā)送方法中,步驟S101可以具體包括:

創(chuàng)建主隊列頭數據端和子數據端;其中,主隊列頭數據端具有鏈接子數據端而使用的網絡協(xié)議族公共特征屬性及內存資源管理特性;具體地,創(chuàng)建主隊列頭數據端sockQH用于鏈接各子數據端sockX形成隊列,創(chuàng)建子數據端sockX用于建立發(fā)送連接,實現(xiàn)數據發(fā)送;

判斷子數據端是否滿足鏈接到主隊列頭數據端的約束條件,是則判斷主隊列的長度是否大于預設閾值,確定主隊列的長度小于預設閾值時則將子數據端添加到主隊列;否則拒絕添加子數據端到主隊列。具體地,新創(chuàng)建的sockQH本身沒有約束條件,約束條件來自每次新的sockX的加入及每次成功加入后的調整;例如第一次加入sockQH的sock1的鏈路MTU值是1500,那么此值會成為一個約束條件,第二次嘗試加入sockQH的sock2的鏈路MTU值是32000,那么它抵觸目前sockQH的約束條件,因為MTU值會影響sockQH對數據分片的處理,只有加入在sockQH里的所有sockX大小一致才能正確處理,所以此時sockQH會拒絕添加sock2。每次加入一個sockX,主隊列的長度增加,每次移出一個sockX,長度減少。主隊列的長度為預設閾值Length,這個值可以預設(例如:32),預設值的依據來自目標系統(tǒng)單核CPU協(xié)議棧處理和網絡硬件設備發(fā)送完整過程的測定數據;確定當前的主隊列長度小于預設閾值,就可以將將待添加的sockX加入到主隊列。需要說明的是,子隊列添加子數據端的方式與主隊列相同,在此不作詳述。

在具體實施時,本發(fā)明實施例提供的上述數據發(fā)送方法中,還可以包括:確定主隊列的長度不小于預設閾值時,根據子隊列的隊列信息依次判斷各子隊列是否小于預設閾值;若確定出一個小于預設閾值的子隊列,則將子數據端添加到子隊列;若確定各子隊列的長度不小于預設閾值,則判斷子隊列頭數據端與主隊列頭數據端的數量之和是否大于中央處理器的數量,是則將子數據端添加到長度最小的隊列中,此處長度最短的隊列指的所有隊列中長度最短的隊列,包括主隊列與子隊列;否則創(chuàng)建一個新的子隊列,將子數據端添加到新的子隊列。

基于同一發(fā)明思想,本發(fā)明實施例提供了一種數據發(fā)送系統(tǒng),可以包括:預先建立的用于處理及發(fā)送有效數據的主隊列;其中,主隊列包括:隊列頭和多個建立有串行鏈接關系的子數據端;每個子數據端用于與接收設備建立連接進行數據處理及發(fā)送;

主隊列中的隊列頭用于接收待發(fā)送的有效數據,并將待發(fā)送的有效數據進行分片處理形成數據包,且將數據包傳遞給主隊列中的第一個子數據端;

主隊列中的每一個子數據端用于將接收到的數據包進行處理及發(fā)送后,傳遞給鏈接的下一個子數據端進行處理及發(fā)送,直至主隊列的最后一個子數據端完成數據處理及發(fā)送。

在具體實施時,本發(fā)明實施例提供的上述數據發(fā)送系統(tǒng)中,還可以包括:至少一個子隊列;

子隊列包括:隊列頭和多個建立有串行連接關系的子數據端;子隊列的隊列頭與主隊列的隊列頭的數量之和小于或等于中央處理器的數量;

子隊列的隊列頭用于復制數據包,并將數據包傳遞給子隊列中的第一個子數據端;

子隊列中的每一個子數據端用于將接收到的數據包進行處理及發(fā)送后,傳遞給鏈接的下一個子數據端進行處理及發(fā)送,直至子隊列的最后一個子數據端完成數據處理及發(fā)送。

在具體實施時,本發(fā)明實施例提供的上述數據發(fā)送系統(tǒng)中,各子數據端還用于:

在完成數據處理及發(fā)送后獲取與該子數據端鏈接的下一個子數據端的信息,并判斷待接收數據包的子數據端是否具有對數據包進行處理及發(fā)送的能力,是則將數據包發(fā)送給子數據端進行處理及發(fā)送;否則將子數據端移動到該子數據端所在隊列的隊尾并標記,子數據端繼續(xù)判斷下一個待接收數據包的子數據端是否具有對數據包進行處理及發(fā)送的能力,直至判斷出具有對數據包進行處理及發(fā)送能力的子數據端,將數據包發(fā)送給該子數據端進行處理及發(fā)送。

在具體實施時,本發(fā)明實施例提供的上述數據發(fā)送系統(tǒng)中,主隊列的各子數據端,還用于:

將數據發(fā)送結果,反饋給主隊列的隊列頭。

在具體實施時,本發(fā)明實施例提供的上述數據發(fā)送系統(tǒng)中,子隊列的各所述子數據端,還用于:將數據發(fā)送結果,反饋給各自所在的子隊列的隊列頭;各子隊列的隊列頭將獲得的反饋結果匯總,并發(fā)送給主隊列的隊列頭。

在具體實施時,本發(fā)明實施例提供的上述數據發(fā)送系統(tǒng)中,還可以包括:創(chuàng)建模塊;創(chuàng)建模塊用于創(chuàng)建接收及發(fā)送有效數據的主隊列。

在具體實施時,本發(fā)明實施例提供的上述數據發(fā)送系統(tǒng)中,創(chuàng)建模塊,具體用于:

創(chuàng)建主隊列的隊列頭和子數據端;

判斷子數據端是否滿足鏈接到主隊列的隊列頭的約束條件,是則判斷主隊列的隊列長度是否大于預設閾值,確定所隊列的隊列長度小于預設閾值時則將子數據端鏈接到主隊列;否則拒絕鏈接子數據端到主隊列。

在具體實施時,本發(fā)明實施例提供的上述數據發(fā)送系統(tǒng)中,創(chuàng)建模塊,還用于:

確定主隊列的隊列長度不小于預設閾值時,依次判斷各子隊列是否小于預設閾值;

若確定出一個小于預設閾值的子隊列,則將子數據端鏈接到子隊列;

若確定各子隊列的隊列長度不小于預設閾值,則判斷子隊列頭的隊列頭與主隊列的隊列頭的數量之和是否大于中央處理器的數量,是則將子數據端鏈接到隊列長度最小的隊列中;否則創(chuàng)建一個新的子隊列,將子數據端鏈接到新的子隊列中。

下面以一個具體實施例說明主隊列與子隊列的創(chuàng)建過程,如圖5所示,具體步驟如下:

S11、創(chuàng)建主隊列頭和子數據端;

S12、判斷子數據端是否滿足約束條件,是則執(zhí)行步驟S13,否則執(zhí)行步驟S14;

S13、判斷主隊列的長度是否大于預設閾值,是則執(zhí)行步驟S15,否則執(zhí)行步驟S16;

S14、拒絕添該子數據端;

S15、判斷子隊列的長度是否大于閾值,是則執(zhí)行步驟S17,否則執(zhí)行步驟S18;

S16、將子數據端添加到主隊列;

S17、判斷子隊列頭與主隊列頭的數量之和是否大于中央處理器的數量,是則執(zhí)行步驟S19;否則執(zhí)行步驟S20;

S18、將子數據端添加到該子隊列;

S19、將子數據端添加到長度最短的隊列中。

S20、創(chuàng)建新的子隊列,將子數據端添加到新創(chuàng)建的子隊列。

本發(fā)明實施例提供了一種數據發(fā)送方法及系統(tǒng),該數據發(fā)送方法包括:主隊列的隊列頭接收待發(fā)送的有效數據,并將待發(fā)送的有效數據進行分片處理形成數據包,且將數據包傳遞給主隊列中的第一個子數據端;其中,主隊列包括:隊列頭和多個建立有串行鏈接關系的子數據端;每個子數據端用于與接收設備建立連接進行數據處理及發(fā)送;主隊列中的每一個子數據端將接收到的數據包進行處理及發(fā)送后,傳遞給鏈接的下一個子數據端進行處理及發(fā)送,直至主隊列的最后一個子數據端完成數據處理及發(fā)送。這樣,將一份相同的數據(例如:某幀視頻數據,某張圖片)同時發(fā)送給多個連接時,只需要進行一次數據分片處理及相應操作,形成對應的數據包并依次傳遞各子數據端進行數據發(fā)送。因此本發(fā)明實施例提供的數據發(fā)送方法,相對于現(xiàn)有技術不需要每個連接單獨處理TCP校驗和計算,也不需要每個連接獨立進行分片處理占用各自的緩存,從而可以減少對有效數據的重復操作和冗余操作,降低系統(tǒng)的額外開銷,提高系統(tǒng)整體處理能力,也有利于降低嵌入式設備的運行功耗。

本領域內的技術人員應明白,本申請的實施例可提供為方法、系統(tǒng)、或計算機程序產品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器和光學存儲器等)上實施的計算機程序產品的形式。

本申請是參照根據本申請實施例的方法、設備(系統(tǒng))、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執(zhí)行的指令產生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。

這些計算機程序指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。

這些計算機程序指令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產生計算機實現(xiàn)的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。

顯然,本領域的技術人員可以對本申請進行各種改動和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權利要求及其等同技術的范圍之內,則本申請也意圖包含這些改動和變型在內。

當前第1頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1