專利名稱:數據處理方法和裝置的制作方法
技術領域:
本發(fā)明實施例涉及計算機網絡技術,尤其涉及一種數據處理方法和裝置。
背景技術:
隨著計算機網絡技術的發(fā)展,多核多線程并發(fā)處理技術也得到的了迅速發(fā)展。在多核多線程并發(fā)處理的環(huán)境中,各線程在處理報文之前,需要讀寫報文所在業(yè)務流數據流的中間狀態(tài)數據,如果同一業(yè)務流數據流的不同報文被多個線程同時處理,則會出現多個線程同時讀寫同一業(yè)務流數據流的中間狀態(tài)數據的情形,而由于一個業(yè)務流數據流的中間狀態(tài)數據同一時刻只能由同一線程讀寫,因此,存在資源競爭的問題,不同進程同一時刻處理同流報文則會存在沖突。為了避免沖突,現有技術中,根據報文的五元組信息計算哈希值,按業(yè)務處理線程數對哈希值進行求模運算,運算結果對應邏輯線程標識(Identity,以下簡稱:ID),從而產生了流到線程的映射關系,最后根據映射關系,將一條流的報文分發(fā)到固定的線程處理,這樣對于一條流的數據是保證單線程處理,從而避免并發(fā)沖突。然而,由于報文分發(fā)的不均勻性,采用現有技術的方案,會出現在一段時間內,某些線程比較繁忙,而某些線程比較空閑的情況,從而導致多業(yè)務并發(fā)執(zhí)行的性能以及網絡設備的處理器的資源利用率均不高。
發(fā)明內容
本發(fā)明實施例提供一種數據處理方法和裝置,以增加多業(yè)務并發(fā)執(zhí)行的性能,提高網絡設備的處理器的資源利用率。本發(fā)明實施例第一方面,提供一種數據處理方法,包括:在對待處理報文進行業(yè)務處理之前,檢測所述待處理報文所在數據流中是否存在正在被處理的報文;若所述待處理報文所在數據流中不存在正在被處理的報文,則將所述待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理。結合第一方面,在第一種可能的實現方式中,所述檢測所述待處理報文所在數據流中是否存在正在被處理的報文,包括:檢測所述待處理報文所在數據流的處理狀態(tài),所述處理狀態(tài)包括正在被處理狀態(tài)和未被處理狀態(tài),其中,正在被處理狀態(tài)用于指示數據流中的一個或多個報文正在被業(yè)務處理線程處理,未被處理狀態(tài)用于指示數據流中沒有任何報文正在被業(yè)務處理線程處理;所述若所述待處理報文所在數據流中不存在正在被處理的報文,則將所述待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理,包括:若檢測到所述待處理報文所在數據流的處理狀態(tài)為未被處理狀態(tài),將所述待處理報文所在數據流的處理狀態(tài)置為正在被處理狀態(tài),將所述待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理,并在所述業(yè)務處理線程對所述待處理報文處理完畢之后,將所述待處理報文所在數據流的處理狀態(tài)置為未被處理狀態(tài)。結合第一方面或第一種可能的實現方式,在第二種可能的實現方式中,所述方法還包括:若檢測到所述待處理報文所在數據流的處理狀態(tài)為正在被處理狀態(tài),則將所述待處理報文緩存在第一緩存區(qū)中。結合第二種可能的實現方式,在第三種可能的實現方式中,所述檢測所述待處理報文所在數據流的處理狀態(tài)之前,還包括:判斷所述第一緩存區(qū)是否為空;若是,則從第二緩存區(qū)中獲取一個待處理報文,其中,所述第二緩存區(qū)用于緩存來自網絡接口報文;若否,則從所述第一緩存區(qū)中獲取一個待處理報文;相應地,所述檢測所述待處理報文所在數據流的處理狀態(tài),包括:檢測從所述第一緩存區(qū)或第二緩存區(qū)獲取的待處理報文所在數據流的處理狀態(tài)。結合第三種可能的實現方式,在第四種可能的實現方式中,所述第一緩存區(qū)包括一個或多個隊列,其中,每一個隊列與一條數據流相關聯,用于緩存該數據流中的待處理報文,所述隊列的個數大于等于所有業(yè)務處理線程的個數;所述將所述待處理報文緩存在第一緩存區(qū)中,包括:判斷所述第一緩存區(qū)中是否存在與所述待處理報文所在數據流相關聯的隊列;若是,則將所述待處理報文緩存在與所述待處理報文所在數據流相關聯的隊列中;若否,則將所述待處理報文緩存在所述第一緩存區(qū)中的空的隊列中,并建立所述空的隊列與所述待處理報文所在數據流的關聯關系,以使所述空的隊列與所述待處理報文所在的數據流相關聯。結合第四種可能的實現方式,在第五種可能的實現方式中,所述將所述待處理報文所在數據流的處理狀態(tài)置為正在被處理狀態(tài),包括:在流表中將所述待處理報文所在數據流的處理狀態(tài)修改為正在被處理狀態(tài);其中,所述流表存儲有所述待處理報文的流標識和處理狀態(tài)的對應關系;所述將所述待處理報文所在數據流的處理狀態(tài)置為未被處理狀態(tài),包括:在流表中將所述待處理報文所在數據流的處理狀態(tài)修改為未被處理狀態(tài);所述檢測從所述第一緩存區(qū)或第二緩存區(qū)獲取的待處理報文所在數據流的處理狀態(tài),包括:若所述待處理報文為從所述第二緩存區(qū)中獲取的待處理報文,則根據所述待處理報文的五元組信息,確定所述待處理報文的流標識,根據所述流標識從所述流表中查詢得到所述待處理報文所在數據流的處理狀態(tài);若所述待處理報文為從所述第一緩存區(qū)的隊列中獲取的待處理報文,則根據所述隊列對應的流標識從所述流表中查詢得到所述待處理報文所在數據流的處理狀態(tài)。結合第四種可能的實現方式或第五種可能的實現方式,在第六種可能的實現方式中,所述從所述第一緩存區(qū)中獲取一個待處理報文之后,還包括:若緩存所述待處理報文的隊列為空,則刪除所述隊列與所述待處理報文所在數據流之間的關聯關系。結合第三種可能的實現方式,在第七種可能的實現方式中,所述第一緩存區(qū)包括一個或多個鏈表,其中,每一個鏈表與一條數據流相關聯,用于緩存該數據流中的待處理報文,所述鏈表的個數大于等于所有業(yè)務處理線程的個數;所述將所述待處理報文緩存在第一緩存區(qū)中,包括:判斷所述第一緩存區(qū)中是否存在與所述待處理報文所在數據流相關聯的鏈表;若是,則將所述待處理報文緩存在與所述待處理報文所在數據流相關聯的鏈表中;若否,則將所述待處理報文緩存在所述第一緩存區(qū)中的空的鏈表中,并建立所述空的鏈表與所述待處理報文所在數據流的關聯關系,以使所述空的鏈表與所述待處理報文所在的數據流相關聯。本發(fā)明實施例第二方面,提供一種數據處理裝置,包括:檢測模塊,用于在對待處理報文進行業(yè)務處理之前,檢測所述待處理報文所在數據流中是否存在正在被處理的報文;處理模塊,用于若所述待處理報文所在數據流中不存在正在被處理的報文,則將所述待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理。結合第二方面,在第一種可能的實現方式中,所述檢測模塊,具體用于檢測所述待處理報文所在數據流的處理狀態(tài),所述處理狀態(tài)包括正在被處理狀態(tài)和未被處理狀態(tài),其中,正在被處理狀態(tài)用于指示數據流中的一個或多個報文正在被業(yè)務處理線程處理,未被處理狀態(tài)用于指示數據流中沒有任何報文正在被業(yè)務處理線程處理;所述處理模塊,具體用于若檢測模塊檢測到所述待處理報文所在數據流的處理狀態(tài)為未被處理狀態(tài),將所述待處理報文所在數據流的處理狀態(tài)置為正在被處理狀態(tài),將所述待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理,并在所述業(yè)務處理線程對所述待處理報文處理完畢之后,將所述待處理報文所在數據流的處理狀態(tài)置為未被處理狀態(tài)。結合第二方面或第一種可能的實現方式,在第二種可能的實現方式中,所述處理模塊,還用于若檢測模塊檢測到所述待處理報文所在數據流的處理狀態(tài)為正在被處理狀態(tài),則將所述待處理報文緩存在第一緩存區(qū)中。結合第二種可能的實現方式,在第三種可能的實現方式中,所述處理模塊,還用于檢測所述待處理報文所在數據流的處理狀態(tài)之前,判斷所述第一緩存區(qū)是否為空;若是,則從第二緩存區(qū)中獲取一個待處理報文,其中,所述第二緩存區(qū)用于緩存來自網絡接口報文;若否,則從所述第一緩存區(qū)中獲取一個待處理報文;相應地,所述檢測模塊,具體用于檢測從所述第一緩存區(qū)或第二緩存區(qū)獲取的待處理報文所在數據流的處理狀態(tài)。結合第三種可能的實現方式,在第四種可能的實現方式中,所述第一緩存區(qū)包括一個或多個隊列,其中,每一個隊列與一條數據流相關聯,用于緩存該數據流中的待處理報文,所述隊列的個數大于等于所有業(yè)務處理線程的個數;所述處理模塊,具體用于判斷所述第一緩存區(qū)中是否存在與所述待處理報文所在數據流相關聯的隊列;若是,則將所述待處理報文緩存在與所述待處理報文所在數據流相關聯的隊列中;若否,則將所述待處理報文緩存在所述第一緩存區(qū)中的空的隊列中,并建立所述空的隊列與所述待處理報文所在數據流的關聯關系,以使所述空的隊列與所述待處理報文所在的數據流相關聯。結合第四種可能的實現方式,在第五種可能的實現方式中,所述處理模塊,具體用于在待處理報文所在數據流的處理狀態(tài)為未被處理狀態(tài)時,在流表中將所述待處理報文所在數據流的處理狀態(tài)修改為正在被處理狀態(tài);其中,所述流表存儲有所述待處理報文的流標識和處理狀態(tài)的對應關系;并在所述業(yè)務處理線程對所述待處理報文處理完畢之后,在流表中將所述待處理報文所在數據流的處理狀態(tài)修改為未被處理狀態(tài);所述檢測模塊,具體用于若所述待處理報文為從所述第二緩存區(qū)中獲取的待處理報文,則根據所述待處理報文的五元組信息,確定所述待處理報文的流標識,根據所述流標識從所述流表中查詢得到所述待處理報文所在數據流的處理狀態(tài);若所述待處理報文為從所述第一緩存區(qū)的隊列中獲取的待處理報文,則根據所述隊列對應的流標識從所述流表中查詢得到所述待處理報文所在數據流的處理狀態(tài)。結合第四種可能的實現方式或第五種可能的實現方式,在第六種可能的實現方式中,所述處理模塊,具體用于所述從所述第一緩存區(qū)中獲取一個待處理報文之后,若緩存所述待處理報文的隊列為空,則刪除所述隊列與所述待處理報文所在數據流之間的關聯關系O結合第三種可能的實現方式,在第七種可能的實現方式中,所述第一緩存區(qū)包括一個或多個鏈表,其中,每一個鏈表與一條數據流相關聯,用于緩存該數據流中的待處理報文,所述鏈表的個數大于等于所有業(yè)務處理線程的個數;所述處理模塊,具體用于判斷所述第一緩存區(qū)中是否存在與所述待處理報文所在數據流相關聯的鏈表;若是,則將所述待處理報文緩存在與所述待處理報文所在數據流相關聯的鏈表中;若否,則將所述待處理報文緩存在所述第一緩存區(qū)中的空的鏈表中,并建立所述空的鏈表與所述待處理報文所在數據流的關聯關系,以使所述空的鏈表與所述待處理報文所在的數據流相關聯。本發(fā)明實施例提供的數據處理方法和裝置,通過在對待處理報文進行業(yè)務處理之前,檢測待處理報文所在數據流中是否存在正在被處理的報文,若待處理報文所在數據流中不存在正在被處理的報文,則將待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理,由于待處理報文所在數據流中不存在正在被處理的報文,因此,可將待處理報文發(fā)送到任何一個業(yè)務處理線程中進行業(yè)務處理,不會發(fā)生同一數據流的報文并發(fā)處理的問題,均衡各個業(yè)務處理線程的任務量,增加多業(yè)務并發(fā)執(zhí)行的性能,提高網絡設備的處理器的資源利用率。
為了更清楚地說明本發(fā)明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。圖1為本發(fā)明數據處理方法實施例一的流程示意圖;圖2為本發(fā)明數據處理方法實施例二的流程示意圖;圖3為本發(fā)明數據處理裝置實施例一的結構示意圖4為本發(fā)明數據處理裝置實施例二的結構示意圖。
具體實施例方式下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。圖1為本發(fā)明數據處理方法實施例一的流程示意圖,如圖1所示,本實施例的方法包括:SlOl:在對待處理報文進行業(yè)務處理之前,檢測待處理報文所在數據流中是否存在正在被處理的報文,若否,則執(zhí)行S102,若是,則執(zhí)行S103。具體地,可通過查詢待處理報文所在數據流的報文處理狀態(tài)確定待處理報文所在數據流中是否存在正在被處理的報文。也可通過查詢各業(yè)務處理線程正在處理的數據流確定待處理報文所在數據流中是否存在正在被處理的報文,也可通過其他方式檢測待處理報文所在數據流中是否存在正在被處理的報文,本發(fā)明實施例對此不作限制。S102:將待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理。若待處理報文所在數據流中不存在正在被處理的報文,則將待處理報文發(fā)送到業(yè)務處理線程中進行業(yè)務處理,由于待處理報文所在數據流中不存在正在被處理的報文,因此,可將待處理報文發(fā)送到任何一個業(yè)務處理線程中進行業(yè)務處理,不會發(fā)生同一數據流的報文并發(fā)處理的問題,即各業(yè)務處理線程同一時刻并發(fā)處理的為不同數據流的報文,在將待處理報文發(fā)送到業(yè)務處理線程進行業(yè)務處理時,可根據調度策略,將待處理報文發(fā)送到比較空閑的業(yè)務處理線程進行業(yè)務處理,均衡各個業(yè)務處理線程的任務量,提高處理器的資源利用率。S103:其他處理。作為一種可行的實現方式:若待處理報文所在數據流中存在正在被處理的報文,則將待處理報文緩存在第一緩存區(qū)中,以便在各業(yè)務處理線程處理的數據流狀態(tài)變化后,從第一緩存區(qū)中獲取待處理報文。本實施例中,通過在對待處理報文進行業(yè)務處理之前,檢測待處理報文所在數據流中是否存在正在被處理的報文,若待處理報文所在數據流中不存在正在被處理的報文,則將待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理,由于待處理報文所在數據流中不存在正在被處理的報文,因此,可將待處理報文發(fā)送到任何一個業(yè)務處理線程中進行業(yè)務處理,不會發(fā)生同一數據流的報文并發(fā)處理的問題,均衡各個業(yè)務處理線程的任務量,增加多業(yè)務并發(fā)執(zhí)行的性能,提高網絡設備的處理器的資源利用率。圖2為本發(fā)明數據處理方法實施例二的流程示意圖,如圖2所示,本實施例的方法包括:S201:判斷第一緩存區(qū)是否為空,若是,執(zhí)行S202,若否,執(zhí)行S203。S202:從第二緩存區(qū)中獲取一個待處理報文。 具體地,第二緩存區(qū)用于緩存來自網絡接口的報文。S203:從第一緩存區(qū)中獲取一個待處理報文。
具體地,若檢測到待處理報文所在數據流中存在正在被處理的報文,則將待處理報文緩存在第一緩存區(qū)中,可選地,第一緩存區(qū)中的待處理報文緩存在一個或多個隊列中,其中,每一個隊列與一條數據流相關聯,用于緩存該數據流中的待處理報文,隊列的個數大于等于網絡設備中所有業(yè)務處理線程的個數。通過S20f S203的步驟保證了報文先到先處理的原則,即優(yōu)選獲取第一緩存區(qū)中的報文,在第一緩存區(qū)為空的情況下,再獲取第二緩存區(qū)中的報文。S204:檢測待處理報文所在數據流中是否存在正在被處理的報文。若是,執(zhí)行S205,若否,執(zhí)行S206。具體地,檢測待處理報文所在數據流中是否存在正在被處理的報文可通過檢測待處理報文所在數據流的處理狀態(tài)來實現,處理狀態(tài)包括正在被處理狀態(tài)和未被處理狀態(tài),當待處理報文所在數據流的處理狀態(tài)為正在被處理狀態(tài),則確定待處理報文所在數據流中存在正在被處理的報文;當待處理報文所在數據流的處理狀態(tài)為未被處理狀態(tài),則確定待處理報文所在數據流中不存在正在被處理的報文;其中,正在被處理狀態(tài)用于指示數據流中的一個或多個報文正在被業(yè)務處理線程處理,未被處理狀態(tài)用于指示數據流中沒有任何報文正在被業(yè)務處理線程處理;分為以下兩種情況:第一種情況:若待處理報文為從第一緩存區(qū)的隊列中獲取的待處理報文,則根據待處理報文所在隊列對應的流標識從流表中查詢得到待處理報文所在數據流的處理狀態(tài),以確定待處理報文所在數據流是否存在正在被處理的報文。第二種情況:若待處理報文為從第二緩存區(qū)中獲取的待處理報文,則根據待處理報文的五元組信息,確定待處理報文的流標識,根據流標識從流表中查詢得到待處理報文所在數據流的處理狀態(tài),以確定待處理報文所在數據流中是否存在正在被處理的報文。同一個數據流的不同報文之間具有相同的五元組信息,五元組信息包括:源網絡協(xié)議(Internet Protocol,以下簡稱:IP)地址、目的IP地址、源端口、目的端口、傳輸層協(xié)議。因此,若待處理報文為從第二緩存區(qū)中獲取的待處理報文,可根據待處理報文的五元組信息,確定待處理報文的流標識,然后再根據流標識檢測待處理報文所在數據流中是否存在正在被處理的報文。具體可通過查詢流表中的流標識對應的報文處理狀態(tài)確定待處理報文所在數據流是否存在正在處理報文。值得說明的是,在執(zhí)行S204之前,還包括建立流表的步驟,具體可以是根據流的五元組信息建立五元組信息與流標識之間的一一對應關系,可選地,可將流標識對應的數據流處理狀態(tài)存儲在流表中,也可以將流標識對應的數據流處理狀態(tài)存儲在流表之外的獨立存儲空間中,總之,可通過流標識查詢到流標識對應的數據流處理狀態(tài)即可,對流標識對應的數據流處理狀態(tài)的具體的存儲方式,本發(fā)明對此不做限制。 可選地,在上述實施例中除了五元組信息外,還可以通過其他能夠標識同一數據流的不同報文的信息,來建立流表,例如六元組信息,其具體實現方式與五元組信息類似,此處不再贅述。S205:將待處理報文緩存在第一緩存區(qū)中。具體地,判斷第一緩存區(qū)中是否存在與待處理報文所在數據流相關聯的隊列;若存在,則將待處理報文緩存在與待處理報文所數據流相關聯的隊列中,可選地,可通過流標識建立待處理報文所在數據流與隊列之間的關聯關系。
若不存在,則將待處理報文緩存在第一緩存區(qū)中的空的隊列中,并建立空的隊列與待處理報文所在數據流的關聯關系,以使空的隊列與待處理報文所在的數據流相關聯,可選地,可通過將空的隊列與待處理報文所在數據流的流標識對應。通過在隊列頭存儲流標識來建立隊列與待處理報文所在數據流的流標識的關聯關系。也就是說,一個隊列只保存一條數據流的報文。S206:將待處理報文所在數據流的處理狀態(tài)置為正在被處理狀態(tài)。根據待處理報文所在數據流的流標識,在流表中將待處理報文所在數據流的處理狀態(tài)置修改為正在被處理狀態(tài),其中,流表存儲有待處理報文的流標識和處理狀態(tài)的對應關系??蛇x地,若待處理報文為從第一緩存區(qū)中獲取的待處理報文,在獲取第一緩存區(qū)中的待處理報文之后,還包括:判斷待處理報文緩存的隊列是否為空,若是,則刪除該隊列與待處理報文所在數據流之間的關聯關系,使該隊列成為一個空的隊列,以便存儲新的數據流的待處理報文。S207:將待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理。可選地,可直接將待處理報文發(fā)送到當前空閑的業(yè)務處理線程進行業(yè)務處理。也可以將待處理報文進行緩存,具體的緩存方式本發(fā)明對此不作限制,然后根據調度策略發(fā)送到業(yè)務處理線程進行業(yè)務處理。由于待處理報文所在數據流中不存在正在被處理的報文,因此,可將待處理報文發(fā)送到任何一個業(yè)務處理線程中進行業(yè)務處理,不會發(fā)生同一數據流的報文并發(fā)處理的問題,任何能夠均衡各個業(yè)務處理線程的任務量的調度方式都可以,從而,提高網絡設備的處理器的資源利用率。S208:將待處理報文所在數據流的處理狀態(tài)置為未被處理狀態(tài)。在業(yè)務處理線程處理完待處理報文之后,將待處理報文所在數據流的處理狀態(tài)置為未被處理狀態(tài),具體地,在流表中將待處理報文所在數據流的處理狀態(tài)修改為未被處理狀態(tài),未被處理狀態(tài)標識該數據流中不存在正在被處理的報文,以使新的待處理報文被發(fā)送到業(yè)務處理線程進行業(yè)務處理。本實施例中,通過檢測待處理報文所在數據流中是否存在正在被處理的報文,若否,將待處理報文所在數據流的處理狀態(tài)置為正在被處理狀態(tài),將待處理報文發(fā)送到業(yè)務處理線程進行業(yè)務處理,在業(yè)務處理線程處理完待處理報文之后,將待處理報文所在數據流的處理狀態(tài)置為未被處理狀態(tài),以使新的待處理報文被發(fā)送到業(yè)務處理線程進行業(yè)務處理,由于待處理報文所在數據流中不存在正在被處理的報文,才將待處理報文發(fā)送到業(yè)務處理線程中進行業(yè)務處理,因此,可將待處理報文發(fā)送到任何一個業(yè)務處理線程中進行業(yè)務處理,不會發(fā)生同一數據流的報文并發(fā)處理的問題,即各業(yè)務處理線程同一時刻并發(fā)處理的為不同數據流的報文,在將待處理報文發(fā)送到業(yè)務處理線程進行業(yè)務處理時,可根據調度策略,將待處理報文發(fā)送到比較空閑的業(yè)務處理線程進行業(yè)務處理,均衡各個業(yè)務處理線程的任務量,以增加多業(yè)務并發(fā)執(zhí)行的性能,提高網絡設備的處理器的資源利用率。在圖2所示實施例中,可選地,第一緩存區(qū)中的待處理報文可以緩存在任意的數據結構中,例如,第一緩存區(qū)中的待處理報文緩存在一個或多個鏈表或者哈希表中,其中,各鏈表或者哈希表對應一個數據流的流標識,鏈表或者哈希表的個數大于等于業(yè)務處理線程的個數,本發(fā)明對此不做限制。
圖3為本發(fā)明數據處理裝置實施例一的結構示意圖,如圖3所示,本實施例的裝置包括檢測模塊301和處理模塊302,其中,檢測模塊301用于在對待處理報文進行業(yè)務處理之前,檢測待處理報文所在數據流中是否存在正在被處理的報文;處理模塊302用于若待處理報文所在數據流中不存在正在被處理的報文,則將待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理。本實施例的裝置用于執(zhí)行圖1所示方法實施例的技術方案,其實現原理和技術效果類似,此處不再贅述。在上述實施例中,檢測模塊301具體用于檢測待處理報文所在數據流的處理狀態(tài),處理狀態(tài)包括正在被處理狀態(tài)和未被處理狀態(tài),其中,正在被處理狀態(tài)用于指示數據流中的一個或多個報文正在被業(yè)務處理線程處理,未被處理狀態(tài)用于指示數據流中沒有任何報文正在被業(yè)務處理線程處理;處理模塊302具體用于若檢測模塊檢測到待處理報文所在數據流的處理狀態(tài)為未被處理狀態(tài),將待處理報文所在數據流的處理狀態(tài)置為正在被處理狀態(tài),將待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理,并在業(yè)務處理線程對待處理報文處理完畢之后,將待處理報文所在數據流的處理狀態(tài)置為未被處理狀態(tài)。在上述實施例中,處理模塊302還用于若檢測模塊檢測到待處理報文所在數據流的處理狀態(tài)為正在被處理狀態(tài),則將待處理報文緩存在第一緩存區(qū)中。在上述實施例中,處理模塊302還用于檢測待處理報文所在數據流的處理狀態(tài)之前,判斷第一緩存區(qū)是否為空;若是,則從第二緩存區(qū)中獲取一個待處理報文,其中,第二緩存區(qū)用于緩存來自網絡接口報文;若否,則從第一緩存區(qū)中獲取一個待處理報文;相應地,檢測模塊301具體用于檢測從第一緩存區(qū)或第二緩存區(qū)獲取的待處理報文所在數據流的處理狀態(tài)。在上述實施例中,第一緩存區(qū)包括一個或多個隊列,其中,每一個隊列與一條數據流相關聯,用于緩存該數據流中的待處理報文,隊列的個數大于等于所有業(yè)務處理線程的個數;處理模塊302具體用于判斷第一緩存區(qū)中是否存在與待處理報文所在數據流相關聯的隊列;若是,則將待處理報文緩存在與待處理報文所在數據流相關聯的隊列中;若否,則將待處理報文緩存在第一緩存區(qū)中的空的隊列中,并建立空的隊列與待處理報文所在數據流的關聯關系,以使空的隊列與待處理報文所在的數據流相關聯。在上述實施例中,處理模塊302處理模塊302具體用于在待處理報文所在數據流的處理狀態(tài)為未被處理狀態(tài)時,在流表中將待處理報文所在數據流的處理狀態(tài)修改為正在被處理狀態(tài);其中,流表存儲有待處理報文的流標識和處理狀態(tài)的對應關系;并在業(yè)務處理線程對待處理報文處理完畢之后,在流表中將待處理報文所在數據流的處理狀態(tài)修改為未被處理狀態(tài);檢測模塊301具體用于若待處理報文為從第二緩存區(qū)中獲取的待處理報文,則根據待處理報文的五元組信息,確定待處理報文的流標識,根據流標識從流表中查詢得到待處理報文所在數據流的處理狀態(tài);若待處理報文為從第一緩存區(qū)的隊列中獲取的待處理報文,則根據隊列對應的流標識從流表中查詢得到待處理報文所在數據流的處理狀態(tài)。在上述實施例中,處理模塊302具體用于從第一緩存區(qū)中獲取一個待處理報文之后,若緩存待處理報文的隊列為空,則刪除隊列與待處理報文所在數據流之間的關聯關系。在上述實施例中,第一緩存區(qū)包括一個或多個鏈表,其中,每一個鏈表與一條數據流相關聯,用于緩存該數據流中的待處理報文,鏈表的個數大于等于所有業(yè)務處理線程的個數;處理模塊302具體用于判斷第一緩存區(qū)中是否存在與待處理報文所在數據流相關聯的鏈表;若是,則將待處理報文緩存在與待處理報文所在數據流相關聯的鏈表中;若否,則將待處理報文緩存在第一緩存區(qū)中的空的鏈表中,并建立空的鏈表與待處理報文所在數據流的關聯關系,以使空的鏈表與待處理報文所在的數據流相關聯。本實施例的裝置用于執(zhí)行圖2所示方法實施例的技術方案,其實現原理和技術效果類似,此處不再贅述。圖4為本發(fā)明數據處理裝置實施例二的結構示意圖,如圖4所示,本實施例本實施例的裝置包括通信接口 401、至少一個處理器402和存儲器403,處理器402、存儲器403和通信接口 401通過總線連接并完成相互間的通信。所述總線可以是工業(yè)標準體系結構(Industry Standard Architecture,簡稱為 ISA)總線、外部設備互連(PeripheralComponent,簡稱為PCI)總線或擴展工業(yè)標準體系結構(Extended Industry StandardArchitecture,簡稱為EISA)總線等。所述總線可以分為地址總線、數據總線、控制總線等。為便于表示,圖4中僅用一條粗線表示,但并不表示僅有一根總線或一種類型的總線。其中,通信接口 401可以為網口、USB接口、射頻單元、天線、w1-fi通信模塊等可以實現數據收發(fā)功能的器件或單元;存儲器403用于存儲可執(zhí)行程序代碼,該程序代碼包括計算機操作指令。存儲器403可能包含高速RAM存儲器,也可能還包括非易失性存儲器(non-volatilememory),例如至少一個磁盤存儲器。在一個實施例中,處理器402通過讀取存儲器403中存儲的可執(zhí)行程序代碼來運行與所述可執(zhí)行程序代碼對應的程序,以用于:在對待處理報文進行業(yè)務處理之前,檢測所述待處理報文所在數據流中是否存在正在被處理的報文;若待處理報文所在數據流中不存在正在被處理的報文,則將所述待處理報文通過通信接口401發(fā)送到業(yè)務處理線程,以進行業(yè)務處理。處理器402可能是一個中央處理器(CentralProcessing Unit,簡稱為 CPU),或者是特定集成電路(Application Specific IntegratedCircuit,簡稱為ASIC),或者是被配置成實施本發(fā)明實施例的一個或多個集成電路。上述處理器402除了實現上述功能之外,還可用于執(zhí)行上述方法實施例中的其他流程,在此不再贅述。其中,上述流程的具體細節(jié),可以參照上述方法實施例,此處不再贅述。在上述實施例中,處理器402具體用于執(zhí)行程序代碼對應的程序,以用于:檢測待處理報文所在數據流的處理狀態(tài),處理狀態(tài)包括正在被處理狀態(tài)和未被處理狀態(tài),其中,正在被處理狀態(tài)用于指示數據流中的一個或多個報文正在被業(yè)務處理線程處理,未被處理狀態(tài)用于指示數據流中沒有任何報文正在被業(yè)務處理線程處理;若檢測模塊檢測到待處理報文所在數據流的處理狀態(tài)為未被處理狀態(tài),將待處理報文所在數據流的處理狀態(tài)置為正在被處理狀態(tài),將待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理,并在業(yè)務處理線程對待處理報文處理完畢之后,將待處理報文所在數據流的處理狀態(tài)置為未被處理狀態(tài)。在上述實施例中,處理器402還用于執(zhí)行程序,以用于:若檢測到待處理報文所在數據流的處理狀態(tài)為正在被處理狀態(tài),則將待處理報文緩存在第一緩存區(qū)中。在上述實施例中,處理器402還用于執(zhí)行程序,以用于:檢測待處理報文所在數據流的處理狀態(tài)之前,判斷第一緩存區(qū)是否為空;若是,則從第二緩存區(qū)中獲取一個待處理報文,其中,第二緩存區(qū)用于緩存來自網絡接口報文;若否,則從第一緩存區(qū)中獲取一個待處理報文;相應地,處理器402具體用于執(zhí)行程序,以用于:檢測從第一緩存區(qū)或第二緩存區(qū)獲取的待處理報文所在數據流的處理狀態(tài)。在上述實施例中,第一緩存區(qū)和第二緩存區(qū)可以為存儲器403中的兩個獨立的存儲空間,進一步地,第一緩存區(qū)包括一個或多個隊列,其中,每一個隊列與一條數據流相關聯,用于緩存該數據流中的待處理報文,隊列的個數大于等于所有業(yè)務處理線程的個數;處理器402具體用于執(zhí)行程序,以用于:判斷第一緩存區(qū)中是否存在與待處理報文所在數據流相關聯的隊列;若是,則將待處理報文緩存在與待處理報文所在數據流相關聯的隊列中;若否,則將待處理報文緩存在第一緩存區(qū)中的空的隊列中,并建立空的隊列與待處理報文所在數據流的關聯關系,以使空的隊列與待處理報文所在的數據流相關聯。在上述實施例中,處理器402具體用于執(zhí)行程序,以用于:在待處理報文所在數據流的處理狀態(tài)為未被處理狀態(tài)時,在流表中將待處理報文所在數據流的處理狀態(tài)修改為正在被處理狀態(tài);其中,流表存儲有待處理報文的流標識和處理狀態(tài)的對應關系;并在業(yè)務處理線程對待處理報文處理完畢之后,在流表中將待處理報文所在數據流的處理狀態(tài)修改為未被處理狀態(tài);處理器402具體用于執(zhí)行程序,以用于:若待處理報文為從第二緩存區(qū)中獲取的待處理報文,則根據待處理報文的五元組信息,確定待處理報文的流標識,根據流標識從流表中查詢得到待處理報文所在數據流的處理狀態(tài);若待處理報文為從第一緩存區(qū)的隊列中獲取的待處理報文,則根據隊列對應的流標識從流表中查詢得到待處理報文所在數據流的處理狀態(tài)。在上述實施例中,處理器402具體用于執(zhí)行程序,以用于:從第一緩存區(qū)中獲取一個待處理報文之后,若緩存待處理報文的隊列為空,則刪除隊列與待處理報文所在數據流之間的關聯關系。 在另一個實施例中,第一緩存區(qū)包括一個或多個鏈表,其中,每一個鏈表與一條數據流相關聯,用于緩存該數據流中的待處理報文,鏈表的個數大于等于所有業(yè)務處理線程的個數;處理器402具體用于執(zhí)行程序,以用于:判斷第一緩存區(qū)中是否存在與待處理報文所在數據流相關聯的鏈表;若是,則將待處理報文緩存在與待處理報文所在數據流相關聯的鏈表中;若否,則將待處理報文緩存在第一緩存區(qū)中的空的鏈表中,并建立空的鏈表與待處理報文所在數據流的關聯關系,以使空的鏈表與待處理報文所在的數據流相關聯。本實施例的裝置用于執(zhí)行圖2所示方法實施例的技術方案,其實現原理和技術效果類似,此處不再贅述。本領域普通技術人員可以理解:實現上述各方法實施例的全部或部分步驟可以通過程序指令相關的硬件來完成。前述的程序可以存儲于一計算機可讀取存儲介質中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質包括:R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質。最后應說明的是:以上各實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分或者全部技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發(fā)明各實施例技術方案的范圍。
權利要求
1.一種數據處理方法,其特征在于,包括: 在對待處理報文進行業(yè)務處理之前,檢測所述待處理報文所在數據流中是否存在正在被處理的報文; 若所述待處理報文所在數據流中不存在正在被處理的報文,則將所述待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理。
2.根據權利要求1所述的方法,其特征在于,所述檢測所述待處理報文所在數據流中是否存在正在被處理的報文,包括: 檢測所述待處理報文所在數據流的處理狀態(tài),所述處理狀態(tài)包括正在被處理狀態(tài)和未被處理狀態(tài),其中,正在被處理狀態(tài)用于指示數據流中的一個或多個報文正在被業(yè)務處理線程處理,未被處理狀態(tài)用于指示數據流中沒有任何報文正在被業(yè)務處理線程處理; 所述若所述待處理報文所在數據流中不存在正在被處理的報文,則將所述待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理,包括: 若檢測到所述待處理報文所在數據流的處理狀態(tài)為未被處理狀態(tài),將所述待處理報文所在數據流的處理狀態(tài)置為正在被處理狀態(tài),將所述待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理,并在所述業(yè)務處理線程對所述待處理報文處理完畢之后,將所述待處理報文所在數據流的處理狀態(tài)置為未被處理狀態(tài)。
3.根據權利要求2所述的方法,其特征在于,還包括: 若檢測到所述待處理報文所在數據流的處理狀態(tài)為正在被處理狀態(tài),則將所述待處理報文緩存在第一緩存區(qū)中。
4.根據權利要求3所述的方法,其特征在于,所述檢測所述待處理報文所在數據流的處理狀態(tài)之前, 還包括: 判斷所述第一緩存區(qū)是否為空; 若是,則從第二緩存區(qū)中獲取一個待處理報文,其中,所述第二緩存區(qū)用于緩存來自網絡接口報文; 若否,則從所述第一緩存區(qū)中獲取一個待處理報文; 相應地,所述檢測所述待處理報文所在數據流的處理狀態(tài),包括:檢測從所述第一緩存區(qū)或第二緩存區(qū)獲取的待處理報文所在數據流的處理狀態(tài)。
5.根據權利要求4所述的方法,其特征在于, 所述第一緩存區(qū)包括一個或多個隊列,其中,每一個隊列與一條數據流相關聯,用于緩存該數據流中的待處理報文,所述隊列的個數大于等于所有業(yè)務處理線程的個數; 所述將所述待處理報文緩存在第一緩存區(qū)中,包括: 判斷所述第一緩存區(qū)中是否存在與所述待處理報文所在數據流相關聯的隊列; 若是,則將所述待處理報文緩存在與所述待處理報文所在數據流相關聯的隊列中; 若否,則將所述待處理報文緩存在所述第一緩存區(qū)中的空的隊列中,并建立所述空的隊列與所述待處理報文所在數據流的關聯關系,以使所述空的隊列與所述待處理報文所在的數據流相關聯。
6.根據權利要求5所述的方法,其特征在于,所述將所述待處理報文所在數據流的處理狀態(tài)置為正在被處理狀態(tài),包括: 在流表中將所述待處理報文所在數據流的處理狀態(tài)修改為正在被處理狀態(tài);其中,所述流表存儲有所述待處理報文的流標識和處理狀態(tài)的對應關系; 所述將所述待處理報文所在數據流的處理狀態(tài)置為未被處理狀態(tài),包括: 在流表中將所述待處理報文所在數據流的處理狀態(tài)修改為未被處理狀態(tài); 所述檢測從所述第一緩存區(qū)或第二緩存區(qū)獲取的待處理報文所在數據流的處理狀態(tài),包括: 若所述待處理報文為從所述第二緩存區(qū)中獲取的待處理報文,則根據所述待處理報文的五元組信息,確定所述待處理報文的流標識,根據所述流標識從所述流表中查詢得到所述待處理報文所在數據流的處理狀態(tài); 若所述待處理報文為從所述第一緩存區(qū)的隊列中獲取的待處理報文,則根據所述隊列對應的流標識從所述流表中查詢得到所述待處理報文所在數據流的處理狀態(tài)。
7.根據權利要求5或6所述的方法,其特征在于,所述從所述第一緩存區(qū)中獲取一個待處理報文之后,還包括: 若緩存所述待處理報文的隊列為空,則刪除所述隊列與所述待處理報文所在數據流之間的關聯關系。
8.根據權利要求4所述的方法,其特征在于,所述第一緩存區(qū)包括一個或多個鏈表,其中,每一個鏈表與一條數據流相關聯,用于緩存該數據流中的待處理報文,所述鏈表的個數大于等于所有業(yè)務處理線程的個數; 所述將所述待處理報文緩存在第一緩存區(qū)中,包括: 判斷所述第一緩存區(qū)中是否存在與所述待處理報文所在數據流相關聯的鏈表; 若是,則將所述待處理報文緩存在與所述待處理報文所在數據流相關聯的鏈表中;若否,則將所述待處理報文緩存在所述第一緩存區(qū)中的空的鏈表中,并建立所述空的鏈表與所述待處理報文所在數據流的關聯關系,以使所述空的鏈表與所述待處理報文所在的數據流相關聯。
9.一種數據處理裝置,其特征在于,包括: 檢測模塊,用于在對待處理報文進行業(yè)務處理之前,檢測所述待處理報文所在數據流中是否存在正在被處理的報文; 處理模塊,用于若所述待處理報文所在數據流中不存在正在被處理的報文,則將所述待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理。
10.根據權利要求9所述的裝置,其特征在于,所述檢測模塊,具體用于,檢測所述待處理報文所在數據流的處理狀態(tài),所述處理狀態(tài)包括正在被處理狀態(tài)和未被處理狀態(tài),其中,正在被處理狀態(tài)用于指示數據流中的一個或多個報文正在被業(yè)務處理線程處理,未被處理狀態(tài)用于指示數據流中沒有任何報文正在被業(yè)務處理線程處理; 所述處理模塊,具體用于,若所述檢測模塊檢測到所述待處理報文所在數據流的處理狀態(tài)為未被處理狀態(tài),將所述待處理報文所在數據流的處理狀態(tài)置為正在被處理狀態(tài),將所述待處理報文發(fā)送到業(yè)務處理線程,以進行業(yè)務處理,并在所述業(yè)務處理線程對所述待處理報文處理完畢之后,將所述待處理報文所在數據流的處理狀態(tài)置為未被處理狀態(tài)。
11.根據權利要求10所述的裝置,其特征在于,所述處理模塊,還用于若檢測模塊檢測到所述待處理報文所在數據流的處理狀態(tài)為正在被處理狀態(tài),則將所述待處理報文緩存在第一緩存區(qū)中。
12.根據權利要求11所述的裝置,其特征在于,所述處理模塊,還用于在檢測模塊檢測所述待處理報文所在數據流的處理狀態(tài)之前,判斷所述第一緩存區(qū)是否為空;若是,則從第二緩存區(qū)中獲取一個待處理報文,其中,所述第二緩存區(qū)用于緩存來自網絡接口報文;若否,則從所述第一緩存區(qū)中獲取一個待處理報文; 相應地,所述檢測模塊,具體用于檢測從所述第一緩存區(qū)或第二緩存區(qū)獲取的待處理報文所在數據流的處理狀態(tài)。
13.根據權利要求12所述的裝置,其特征在于, 所述第一緩存區(qū)包括一個或多個隊列,其中,每一個隊列與一條數據流相關聯,用于緩存該數據流中的待處理報文,所述隊列的個數大于等于所有業(yè)務處理線程的個數; 所述處理模塊,具體用于判斷所述第一緩存區(qū)中是否存在與所述待處理報文所在數據流相關聯的隊列;若是,則將所述待處理報文緩存在與所述待處理報文所在數據流相關聯的隊列中;若否,則將所述待處理報文緩存在所述第一緩存區(qū)中的空的隊列中,并建立所述空的隊列與所述待處理報文所在數據流的關聯關系,以使所述空的隊列與所述待處理報文所在的數據流相關聯。
14.根據權利要求13所述的裝置,其特征在于,所述處理模塊,具體用于在待處理報文所在數據流的處理狀態(tài)為未被處理狀態(tài)時,在流表中將所述待處理報文所在數據流的處理狀態(tài)修改為正在被處理狀態(tài);其中,所述流表存儲有所述待處理報文的流標識和處理狀態(tài)的對應關系;并在所述業(yè)務 處理線程對所述待處理報文處理完畢之后,在流表中將所述待處理報文所在數據流的處理狀態(tài)修改為未被處理狀態(tài); 所述檢測模塊,具體用于若所述待處理報文為從所述第二緩存區(qū)中獲取的待處理報文,則根據所述待處理報文的五元組信息,確定所述待處理報文的流標識,根據所述流標識從所述流表中查詢得到所述待處理報文所在數據流的處理狀態(tài);若所述待處理報文為從所述第一緩存區(qū)的隊列中獲取的待處理報文,則根據所述隊列對應的流標識從所述流表中查詢得到所述待處理報文所在數據流的處理狀態(tài)。
15.根據權利要求13或14所述的裝置,其特征在于,所述處理模塊,具體用于所述從所述第一緩存區(qū)中獲取一個待處理報文之后,若緩存所述待處理報文的隊列為空,則刪除所述隊列與所述待處理報文所在數據流之間的關聯關系。
16.根據權利要求12所述的裝置,其特征在于,所述第一緩存區(qū)包括一個或多個鏈表,其中,每一個鏈表與一條數據流相關聯,用于緩存該數據流中的待處理報文,所述鏈表的個數大于等于所有業(yè)務處理線程的個數; 所述處理模塊,具體用于判斷所述第一緩存區(qū)中是否存在與所述待處理報文所在數據流相關聯的鏈表;若是,則將所述待處理報文緩存在與所述待處理報文所在數據流相關聯的鏈表中;若否,則將所述待處理報文緩存在所述第一緩存區(qū)中的空的鏈表中,并建立所述空的鏈表與所述待處理報文所在數據流的關聯關系,以使所述空的鏈表與所述待處理報文所在的數據流相關聯。
全文摘要
本發(fā)明實施例提供一種數據處理方法和裝置,通過在對待處理報文進行業(yè)務處理之前,檢測待處理報文所在數據流中是否存在正在被處理的報文,若待處理報文所在數據流中不存在正在被處理的報文,則將待處理報文發(fā)送到處理線程中進行業(yè)務處理,由于待處理報文所在數據流中不存在正在被處理的報文,因此,可將待處理報文發(fā)送到任何一個處理線程中進行業(yè)務處理,不會發(fā)生同一數據流的報文并發(fā)處理的問題,均衡各個處理線程的任務量,從而,提高網絡設備處理器的資源利用率。
文檔編號H04L12/70GK103166845SQ20131006662
公開日2013年6月19日 申請日期2013年3月1日 優(yōu)先權日2013年3月1日
發(fā)明者史云龍, 何俊, 楊興華 申請人:華為技術有限公司