本申請涉及計算機技術(shù)領(lǐng)域,尤其涉及一種共享內(nèi)存管理方法、裝置及系統(tǒng)。
背景技術(shù):
多進程軟件系統(tǒng)中通常需要將數(shù)據(jù)存儲在共享內(nèi)存中,進程通過訪問該共享內(nèi)存讀取數(shù)據(jù)進行相應(yīng)處理;而共享內(nèi)存需要經(jīng)過創(chuàng)建、進程間流轉(zhuǎn)、回收等處理,因此,多進程軟件系統(tǒng)中需要對共享內(nèi)存進行管理。
傳統(tǒng)的多進程軟件系統(tǒng)中采用的共享內(nèi)存管理方式為:預(yù)先根據(jù)業(yè)務(wù)規(guī)定的數(shù)據(jù)流轉(zhuǎn)路徑,設(shè)置實現(xiàn)該業(yè)務(wù)的各個進程之間的調(diào)用關(guān)系;當該業(yè)務(wù)下有待處理數(shù)據(jù)時,由第一個進程根據(jù)待處理數(shù)據(jù)的大小臨時申請一個共享內(nèi)存,然后第一個進程根據(jù)進程調(diào)用關(guān)系調(diào)用下一個進程訪問該共享內(nèi)存進行數(shù)據(jù)處理,直到數(shù)據(jù)處理完畢時,系統(tǒng)才釋放掉該業(yè)務(wù)的共享內(nèi)存。
對于多進程軟件系統(tǒng)而言,需要針對每種業(yè)務(wù)創(chuàng)建實現(xiàn)該業(yè)務(wù)的進程以及設(shè)定各個進程之間的調(diào)用關(guān)系,當系統(tǒng)內(nèi)業(yè)務(wù)種類較多時,需要創(chuàng)建大量的進程,進程之間的調(diào)用增加了進程的耦合性,系統(tǒng)適用性較低;并且在業(yè)務(wù)量較大的情況下,系統(tǒng)可能會出現(xiàn)超負荷的問題。
另外,在實際應(yīng)用中,系統(tǒng)中的已有業(yè)務(wù)會根據(jù)實際需求而經(jīng)常性發(fā)生一些改變,則開發(fā)人員就需要針對性地調(diào)整各個進程以及各個進程的調(diào)用關(guān)系,代碼調(diào)整的工作量繁瑣且巨大,則很難保證業(yè)務(wù)調(diào)整響應(yīng)地及時性。
技術(shù)實現(xiàn)要素:
為解決現(xiàn)有存在的技術(shù)問題,本申請?zhí)峁┝艘环N共享內(nèi)存管理方法,以期降低進程間相互調(diào)用的耦合性,并提高系統(tǒng)適用性。
本申請還提供了一種共享內(nèi)存管理裝置和系統(tǒng),用以保證上述方法在實際中的應(yīng)用及實現(xiàn)。
在本申請第一方面提供了一種共享內(nèi)存管理方法,所述方法包括:
針對業(yè)務(wù)創(chuàng)建共享內(nèi)存的控制管道,將實現(xiàn)所述業(yè)務(wù)的節(jié)點掛接在所述控制管道,所述節(jié)點包括:由不同的進程實現(xiàn)的功能節(jié)點,一個進程包括一個或多個功能節(jié)點;
當接收到所述業(yè)務(wù)的待處理數(shù)據(jù)時,通過所述控制管道控制所述節(jié)點之間傳遞處理所述待處理數(shù)據(jù)所使用的共享內(nèi)存,以實現(xiàn)對所述待處理數(shù)據(jù)的處理。
本申請第二方面提供了一種共享內(nèi)存管理裝置,所述裝置包括:
控制管道創(chuàng)建及節(jié)點掛載模塊,用于針對業(yè)務(wù)創(chuàng)建共享內(nèi)存的控制管道,將實現(xiàn)所述業(yè)務(wù)的節(jié)點掛接在所述控制管道,所述節(jié)點包括:由不同的進程實現(xiàn)的功能節(jié)點,一個進程包括一個或多個功能節(jié)點;
數(shù)據(jù)處理模塊,用于當接收到所述業(yè)務(wù)的待處理數(shù)據(jù)時,通過所述控制管道控制所述節(jié)點之間傳遞處理所述待處理數(shù)據(jù)所使用的共享內(nèi)存,以實現(xiàn)對所述待處理數(shù)據(jù)的處理。
本申請第三方面提供了一種共享內(nèi)存管理系統(tǒng),所述系統(tǒng)包括:
至少一個處理器和至少一個存儲器,所述至少存儲器中存儲有可操作指令,所述至少一個處理器讀取并執(zhí)行所述可操作指令;
所述可操作指令,至少包括:
針對業(yè)務(wù)創(chuàng)建共享內(nèi)存的控制管道,將實現(xiàn)所述業(yè)務(wù)的節(jié)點掛接在所述控制管道,所述節(jié)點包括:由不同的進程實現(xiàn)的功能節(jié)點,一個進程包括一個或多個功能節(jié)點;
當接收到所述業(yè)務(wù)的待處理數(shù)據(jù)時,通過所述控制管道控制所述節(jié)點之間傳遞處理所述待處理數(shù)據(jù)所使用的共享內(nèi)存,以實現(xiàn)對所述待處理數(shù)據(jù)的處理。
與現(xiàn)有技術(shù)相比,本申請?zhí)峁┑募夹g(shù)方案具有如下優(yōu)點:
在本申請的技術(shù)方案中,考慮到多進程軟件系統(tǒng)中業(yè)務(wù)處理是依賴于進程間數(shù)據(jù)處理來實現(xiàn)的,提出了針對一種業(yè)務(wù)創(chuàng)建共享內(nèi)存的控制管道,將實現(xiàn)所述業(yè)務(wù)的節(jié)點掛接在所述控制管道,所述節(jié)點包括:由不同的進程實現(xiàn)的功能節(jié)點,一個進程包括一個或多個功能節(jié)點;這種將進程功能節(jié)點化的方式,可以使不同的業(yè)務(wù)公用同一進程的不同功能節(jié)點,更加靈活地使用已有進程;再者這種節(jié)點掛接方式,方便根據(jù)業(yè)務(wù)需求動態(tài)調(diào)整數(shù)據(jù)處理流程,能夠提高系統(tǒng)適用性。
當該業(yè)務(wù)有數(shù)據(jù)需要處理時,通過所述控制管道控制所述節(jié)點之間傳遞處理所述待處理數(shù)據(jù)所使用的共享內(nèi)容,以實現(xiàn)對所述待處理數(shù)據(jù)的處理。該方法不需要依賴進程間的直接地調(diào)用,而是通過業(yè)務(wù)的控制管道控制節(jié)點實現(xiàn)對數(shù)據(jù)的處理,從而能夠降低進程間的耦合性。
附圖說明
為了更清楚地說明本申請實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本申請?zhí)峁┑囊环N共享內(nèi)存管理方法的流程圖;
圖2為本申請?zhí)峁┑牟煌M程功能節(jié)點化的結(jié)果示例圖;
圖3為本申請?zhí)峁┑尼槍σ粋€業(yè)務(wù)構(gòu)建的控制管道和緩存池的結(jié)構(gòu)示意圖;
圖4為本申請?zhí)峁┑囊环N共享內(nèi)存管理裝置的結(jié)構(gòu)圖;
圖5為本申請?zhí)峁┑囊环N共享內(nèi)存管理系統(tǒng)的結(jié)構(gòu)圖。
具體實施方式
本申請的目的在于提供應(yīng)用于多進程軟件系統(tǒng)中的一種共享內(nèi)存管理方法及裝置,以提供一種新的共享內(nèi)存管理方式,降低進程間的耦合性,提高系統(tǒng)適用性,進一步地還可以減小系統(tǒng)內(nèi)存激增現(xiàn)象。
本申請通過針對業(yè)務(wù)建立對應(yīng)控制管道機制來管理共享內(nèi)存,利用掛接在控制管道上的、實現(xiàn)待處理業(yè)務(wù)的源節(jié)點、一個或多個中間節(jié)點、目的節(jié)點形成數(shù)據(jù)單向控制鏈路以控制共享內(nèi)存的創(chuàng)建、傳輸、回收。這些節(jié)點都是不同進程所承載的功能節(jié)點,即,在本申請中對進程作了功能節(jié)點化處理,使得一個進程可以向不同的業(yè)務(wù)提供功能節(jié)點的方式,實現(xiàn)對不同業(yè)務(wù)的數(shù)據(jù)處理。從而,在本申請中針對業(yè)務(wù)的數(shù)據(jù)處理時,就通過所述控制管道控制掛載在控制管道上的節(jié)點進行相應(yīng)的數(shù)據(jù)處理,以完成對該業(yè)務(wù)下的待處理數(shù)據(jù)的處理。這種方式不再單純地依賴進程之間調(diào)用,而是利用控制管道實現(xiàn)共享內(nèi)存和數(shù)據(jù)的傳輸,從而能夠降低了進程間相互調(diào)用的耦合性,提高系統(tǒng)的適用性。
為使得本申請的發(fā)明目的、特征、優(yōu)點能夠更加的明顯和易懂,下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進行描述,顯然,所描述的實施例僅是本申請一部分實施例,而非全部實施例?;诒旧暾堉械膶嵤├?,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
請參閱圖1,圖1為本申請?zhí)峁┑囊环N共享內(nèi)存管理方法實施例1的流程圖,如圖1所示,該方法可以包括以下步驟:
步驟101:針對業(yè)務(wù)創(chuàng)建共享內(nèi)存的控制管道,將實現(xiàn)所述業(yè)務(wù)的節(jié)點掛接在所述控制管道,所述節(jié)點包括:由不同的進程實現(xiàn)的功能節(jié)點,一個進程包括一個或多個功能節(jié)點。
在本實施例中,業(yè)務(wù)是指基于多進程的數(shù)據(jù)處理業(yè)務(wù);但在本實施例中,對業(yè)務(wù)所屬的具體行業(yè),業(yè)務(wù)的具體內(nèi)容,業(yè)務(wù)的具體形式均不作限制,比如,基于多進程的手機3G增值業(yè)務(wù),基于多進程的銀行日終結(jié)息業(yè)務(wù)等,任何一種需要多進程實現(xiàn)的數(shù)據(jù)處理業(yè)務(wù)都適用本申請實施例的方法。
在本實施例中,針對一種業(yè)務(wù)創(chuàng)建一個控制管道,則不同的業(yè)務(wù)均有各自對應(yīng)的控制管道,業(yè)務(wù)與控制管道之間成一一對應(yīng)關(guān)系。
在實現(xiàn)時,可以通過以下方式為業(yè)務(wù)創(chuàng)建控制管道:
根據(jù)業(yè)務(wù)的數(shù)據(jù)處理流程實例化一個對象,將該對象稱為控制管道,該對象包括:節(jié)點實例化地址的鏈表和節(jié)點間回調(diào)地址的回調(diào)接收器;在創(chuàng)建該對象時,可以清空保存節(jié)點實例化地址的鏈表,以便在節(jié)點掛載時存儲節(jié)點實例化地址,并將節(jié)點回調(diào)接收器地址傳遞給節(jié)點。
比如,針對業(yè)務(wù)1創(chuàng)建了控制管道A,針對業(yè)務(wù)2創(chuàng)建了控制管道B,針對業(yè)務(wù)3創(chuàng)建了控制管道C,則相成以下對應(yīng)關(guān)系:
業(yè)務(wù)1與控制管道A成一一對應(yīng)關(guān)系;
業(yè)務(wù)2與控制管道B成一一對應(yīng)關(guān)系;
業(yè)務(wù)3與控制管道C成一一對應(yīng)關(guān)系。
在上述步驟101中,將實現(xiàn)所述業(yè)務(wù)的節(jié)點掛接在所述控制管道,其實現(xiàn)過程是,系統(tǒng)的應(yīng)用層根據(jù)業(yè)務(wù)需求將與該業(yè)務(wù)相關(guān)的進程中的功能節(jié)點依次掛接在與該業(yè)務(wù)對應(yīng)的控制管道上。在一個進程被功能節(jié)點化處理后,其可能包括一個或多個功能節(jié)點,該功能節(jié)點可以是源節(jié)點、中間節(jié)點、目的節(jié)點。
在實現(xiàn)時,可以通過以下方式實現(xiàn)進程的功能節(jié)點化處理:
當一個進程參與某個業(yè)務(wù)的數(shù)據(jù)處理流程時,該進程就創(chuàng)建一個處理節(jié)點,并將該處理節(jié)點的數(shù)據(jù)處理流程封裝在節(jié)點處理函數(shù)中,該處理節(jié)點通過該節(jié)點處理函數(shù)實現(xiàn)其功能,則該處理節(jié)點就是該進程的一個功能節(jié)點。
例如,一個進程可能包括一個或多個源節(jié)點,也可能包括一個或多個中間節(jié)點,也可能包括一個或多個目的節(jié)點;一個進程也可能包括:一個或多個源節(jié)點、一個或多個中間節(jié)點、一個或多個目的節(jié)點的任意組合。
以圖2為例,對一個進程包含功能節(jié)點的情況進行示例化說明。
在圖2中,進程1包括:兩個源節(jié)點S1和S2;
進程2包括:一個目的節(jié)點T1;
進程3包括:三個中間節(jié)點I1、I3和I4;
進程4包括:一個中間節(jié)點I2;
進程5包括:一個源節(jié)點S3和兩個目的節(jié)點T2和T3。
其中,源節(jié)點是指用于完成數(shù)據(jù)初始化工作的功能節(jié)點;中間節(jié)點是指對數(shù)據(jù)作處理的功能節(jié)點;目的節(jié)點是指使用中間節(jié)點處理后的數(shù)據(jù)的功能節(jié)點。
以圖2為例,對上述步驟101進行示例性說明。
針對業(yè)務(wù)1構(gòu)建控制管道A,然后根據(jù)業(yè)務(wù)1的數(shù)據(jù)處理流程,確定與其業(yè)務(wù)相關(guān)的功能節(jié)點分別是進程1中的一個源節(jié)點S1和進程2中的目的節(jié)點T1;將節(jié)點S1和T1按照順序依次掛接在控制管道A上。
針對業(yè)務(wù)2構(gòu)建控制管道B,然后根據(jù)業(yè)務(wù)2的數(shù)據(jù)處理流程,確定與業(yè)務(wù)2相關(guān)的功能節(jié)點分別是進程1的一個源節(jié)點S2、進程3的兩個中間節(jié)點I1和I3、進程4的一個中間節(jié)點I2,以及進程5的一個目的節(jié)點T2;則將節(jié)點S2、I1、I2、I3以及T2按照順序依次掛接在控制管道B上。
針對業(yè)務(wù)3構(gòu)建控制管道C,然后根據(jù)業(yè)務(wù)3的數(shù)據(jù)處理流程,確定與業(yè)務(wù)3相關(guān)的功能節(jié)點分別是進程5的源節(jié)點S3、進程3的中間節(jié)點I4以及進程5的目的節(jié)點T3;則將節(jié)點S3、I4以及T3按照順序依次掛接在控制管道C上。
其中,掛接操作的具體實現(xiàn)過程如下:
根據(jù)所述業(yè)務(wù)的數(shù)據(jù)處理順序,將源節(jié)點、中間節(jié)點、以及目的節(jié)點的實例化地址依次存儲至所述控制管道維護的節(jié)點鏈表中,并使用回調(diào)機制與所述控制管道建立通知關(guān)系。
例如:源節(jié)點在掛接時創(chuàng)建通知信號,并將實例化地址存儲至控制管道維護的節(jié)點鏈表中。在后期,針對該業(yè)務(wù)下的待處理數(shù)據(jù),源節(jié)點根據(jù)業(yè)務(wù)需求初始化共享內(nèi)存,啟動共享內(nèi)存在控制管道上的傳輸。
中間節(jié)點:中間節(jié)點掛接時創(chuàng)建通知信號,并將實例化地址存儲至控制管道維護的節(jié)點鏈表中。同時,從控制管道獲取上一個節(jié)點(“上一個節(jié)點”可能是源節(jié)點,也可能是中間節(jié)點)通知信號信息(如信號名稱)來創(chuàng)建等待信號,啟動數(shù)據(jù)處理線程,使用等待信號掛起線程。在后期,針對該業(yè)務(wù)下的待處理數(shù)據(jù),中間節(jié)點接收上一個節(jié)點通知后,再進行數(shù)據(jù)處理,處理完畢后再通知下一個節(jié)點繼續(xù)進行數(shù)據(jù)處理。
目的節(jié)點:目的節(jié)點掛接時從控制管道獲取最后一個中間節(jié)點通知信號信息(如信號名稱)來創(chuàng)建等待信號,啟動數(shù)據(jù)處理線程,使用等待信號掛起線程。在后期,針對該業(yè)務(wù)下的待處理數(shù)據(jù),目的節(jié)點接收最后一個中間節(jié)點通知后,拷貝數(shù)據(jù)處理結(jié)果,向應(yīng)用層提供數(shù)據(jù),并通知控制管道處理完畢。
經(jīng)過上述步驟101的處理,就針對業(yè)務(wù)構(gòu)建好其對應(yīng)的數(shù)據(jù)處理鏈路。當該業(yè)務(wù)下有數(shù)據(jù)需要處理時,則直接利用該數(shù)據(jù)處理鏈路進行處理即可。
接下來,步驟102描述的就是利用該數(shù)據(jù)處理鏈路處理數(shù)據(jù)的過程,在該過程中實現(xiàn)對共享內(nèi)存的創(chuàng)建和傳輸?shù)忍幚怼?/p>
步驟102:當接收到所述業(yè)務(wù)的待處理數(shù)據(jù)時,通過所述控制管道控制所述節(jié)點之間傳遞處理所述待處理數(shù)據(jù)所使用的共享內(nèi)存,以實現(xiàn)對所述待處理數(shù)據(jù)的處理。
在實現(xiàn)時,步驟102可以包括:
通過所述控制管道控制所述節(jié)點中的源節(jié)點向系統(tǒng)申請共享內(nèi)存;以及,
通過所述控制管道控制所述節(jié)點中的源節(jié)點對申請到的共享內(nèi)存進行數(shù)據(jù)初始化,并控制所述節(jié)點中的源節(jié)點和中間節(jié)點通過內(nèi)核事件信號通知機制向所述節(jié)點中的下一個節(jié)點傳遞所述共享內(nèi)存和處理后的數(shù)據(jù),以完成對所述待處理數(shù)據(jù)的處理。
可以理解的是,當接收到所述業(yè)務(wù)的待處理數(shù)據(jù)時,通過所述控制管道控制所述源節(jié)點向系統(tǒng)申請共享內(nèi)存,并初始化數(shù)據(jù),通過內(nèi)核事件信號通知機制傳遞共享內(nèi)存數(shù)據(jù)至中間節(jié)點、目的節(jié)點,以使所述中間節(jié)點依次完成數(shù)據(jù)處理以及目的節(jié)點完成數(shù)據(jù)使用。
即,當系統(tǒng)接收到該業(yè)務(wù)下的一條待處理數(shù)據(jù)時,就由該業(yè)務(wù)對應(yīng)的控制管道上的節(jié)點來接收該條待處理數(shù)據(jù),并對該條待處理數(shù)據(jù)進行相應(yīng)處理。具體處理過程如下:
源節(jié)點在接收到待處理數(shù)據(jù)時,根據(jù)待處理數(shù)據(jù)大小向系統(tǒng)申請共享內(nèi)存,申請到共享內(nèi)存之后,初始化數(shù)據(jù),完成數(shù)據(jù)初始化之后,源節(jié)點將節(jié)點序號和共享內(nèi)存地址反饋給所述控制管道,所述控制管道設(shè)置下一個節(jié)點的共享內(nèi)存地址,激發(fā)源節(jié)點通知信號;
中間節(jié)點等待的源節(jié)點通知信號被激發(fā)后,進行數(shù)據(jù)處理,處理完成后將節(jié)點序號和共享內(nèi)存地址反饋給所述控制管道,所述控制管道設(shè)置下一個節(jié)點的共享內(nèi)存地址,激發(fā)中間節(jié)點通知信號,通知下一個中間節(jié)點進行數(shù)據(jù)處理,直到最后一個中間節(jié)點通知目的節(jié)點完成數(shù)據(jù)使用。
本申請發(fā)明人進一步分析發(fā)現(xiàn):傳統(tǒng)的多進程軟件系統(tǒng)采用的共享內(nèi)存管理方法,每一次處理數(shù)據(jù),都需要臨時申請一個共享內(nèi)存,使用完畢后再釋放掉該共享內(nèi)存,這樣,頻繁動態(tài)申請和釋放內(nèi)存,容易造成系統(tǒng)內(nèi)存激增現(xiàn)象,一定程度上影響系統(tǒng)的性能。
為了進一步解決現(xiàn)有技術(shù)中存在的頻繁動態(tài)申請和釋放內(nèi)存,容易造成系統(tǒng)內(nèi)存激增現(xiàn)象的問題,本申請還提供了對應(yīng)的解決方法,該方法具體是在上述圖1所示方法的基礎(chǔ)上,還增加如下步驟:
針對所述業(yè)務(wù)創(chuàng)建緩存池,根據(jù)所述業(yè)務(wù)的需求向系統(tǒng)申請多個共享內(nèi)存,在所述緩存池中存儲所述多個共享內(nèi)存的地址;
則所述待處理數(shù)據(jù)所使用的共享內(nèi)存是由所述節(jié)點中的源節(jié)點從所述緩存池中申請的一個共享內(nèi)存。
相應(yīng)地,上述步驟102中的所述控制管道控制所述節(jié)點中的源節(jié)點向系統(tǒng)申請共享內(nèi)存,包括:
通過所述控制管道控制所述源節(jié)點從所述緩存池中獲取可用的共享內(nèi)存的地址。
所述緩存池可以使用鏈表的方式來存儲申請到的多個共享內(nèi)存的地址,利用鏈表存儲方式能夠快速查看、定位共享內(nèi)存地址。
即,在所述緩存池中存儲所述多個共享內(nèi)存的地址,可以包括:
在所述緩存池中使用鏈表存儲所述多個共享內(nèi)存的地址。
這里需要說明的是,本申請實施例在實現(xiàn)創(chuàng)建緩存池時,可以采用創(chuàng)建控制管道包含緩存池的方式,則在創(chuàng)建控制管道時,通過調(diào)用緩存池接口方法初始化緩存池,即申請共享內(nèi)存塊。在這種情況下,則節(jié)點就可以直接從控制管道就可以申請共享內(nèi)存。
當然,在實現(xiàn)創(chuàng)建緩存時,也可以獨立于控制管道,創(chuàng)建一個緩存池,但控制管道需要維護緩存池的實例化地址,以便通知節(jié)點從該緩存池中申請共享內(nèi)存。為了方便本領(lǐng)域技術(shù)人員更清楚地理解上述方法,下面結(jié)合圖3對上述方法的實現(xiàn)原理進行解釋說明。
如圖3所示,針對一個業(yè)務(wù)構(gòu)建控制管道和緩存池,控制管道上掛接有實現(xiàn)該業(yè)務(wù)的各個節(jié)點;緩存池向系統(tǒng)申請多個共享內(nèi)存,源節(jié)點在需要進行數(shù)據(jù)處理時,直接從緩存池中獲取可用的共享內(nèi)存,再通過控制管道傳遞該共享內(nèi)存和處理后的數(shù)據(jù),各個中間節(jié)點依次對接收到的數(shù)據(jù)進行相應(yīng)處理,直到目的節(jié)點處理完畢后向緩存池返回該共享內(nèi)存。
另外在上述圖1所示方法的基礎(chǔ)上,所述方法還可以包括以下步驟:
當所述待處理數(shù)據(jù)處理完畢時,回收使用后的共享內(nèi)存。
即,目的節(jié)點完成數(shù)據(jù)使用時就標志著所述待處理數(shù)據(jù)處理完畢,即,在目的節(jié)點在完成數(shù)據(jù)使用時,通知控制管道此次數(shù)據(jù)處理已經(jīng)完成,則系統(tǒng)直接回收目的節(jié)點使用后的該共享內(nèi)存。
進一步地,在針對業(yè)務(wù)創(chuàng)建有緩存池情況下,本申請針對如何回收使用后的共享內(nèi)存,還對應(yīng)的提供了較為優(yōu)選的共享內(nèi)存回收方式。具體方式如下:
在所述節(jié)點中的目的節(jié)點完成數(shù)據(jù)使用時,使用回調(diào)通知控制管道共享內(nèi)存使用完畢,通過控制管道調(diào)用緩存池進行共享內(nèi)存回收。
進一步地,該方式可以包括:
判斷所述緩存池中當前空閑的共享內(nèi)存數(shù)量是否小于預(yù)設(shè)閾值;
如果是,則將所述待處理數(shù)據(jù)所使用的共享內(nèi)存清理后重新存儲;
如果否,則將所述待處理數(shù)據(jù)所使用的共享內(nèi)存釋放掉。
這種方式可以根據(jù)業(yè)務(wù)的實際需求情況,靈活地管理緩存池中的共享內(nèi)存,以達到在滿足業(yè)務(wù)需求的情況下,盡可能少占用系統(tǒng)內(nèi)存資源。
當然,在實際應(yīng)用中,也可以直接將共享內(nèi)存清理后重新存儲,還可以直接釋放共享內(nèi)存,但顯然上述方式的效果更好。
在現(xiàn)有技術(shù)中,各個進程之間通過調(diào)用的方式實現(xiàn)針對某個業(yè)務(wù)的數(shù)據(jù)處理。因此,當業(yè)務(wù)需求發(fā)生變化時,開發(fā)人員就需要對實現(xiàn)該業(yè)務(wù)的相關(guān)進程以及調(diào)用關(guān)系進行適應(yīng)性修改;而在實際應(yīng)用中,業(yè)務(wù)需求的更新頻率非常高,這就需要頻繁的修改進程以及調(diào)用關(guān)系,系統(tǒng)適用性較低,且代碼調(diào)整的工作量繁瑣且巨大,很難保證業(yè)務(wù)調(diào)用響應(yīng)的及時性。
為了解決上述問題,本申請還提供了對應(yīng)的解決方法,該方法具體可以在上述圖1所示方法的基礎(chǔ)上,增加如下步驟:
接收所述控制管道的節(jié)點掛載信息,根據(jù)接收到的節(jié)點掛載信息更新所述控制管道上掛載的節(jié)點。
對于研發(fā)人員來說,不需要修改進程的源代碼,只需要根據(jù)業(yè)務(wù)的實際需求,修改控制管道的節(jié)點掛載信息即可,其工作量大大減小。
在實現(xiàn)時,更新控制管道上掛載的節(jié)點,主要是利用節(jié)點實例化地址對實現(xiàn)業(yè)務(wù)的節(jié)點信息進行設(shè)置,其中,節(jié)點信息包括:節(jié)點序號、節(jié)點等待信號、節(jié)點通知信號等。
接下來,對更新控制管道上掛載的節(jié)點的具體情況進行解釋說明。
在執(zhí)行更新操作時,首先,通知控制管道上的所有節(jié)點停止數(shù)據(jù)處理并退出所有處理線程;然后,調(diào)整節(jié)點鏈表;最后,通知所有節(jié)點重新啟動數(shù)據(jù)處理線程。
其中,節(jié)點列表的調(diào)整方式有以下幾種:
(1)更換源節(jié)點:復(fù)制原源節(jié)點的通知信號和節(jié)點序號,將節(jié)點鏈表中首個節(jié)點刪除插入新源節(jié)點。更換源節(jié)點必須確保新的源節(jié)點的通知信號和節(jié)點序號與原來的源節(jié)點的相同,因此,通過復(fù)制的方式保證新的源節(jié)點和原源節(jié)點的這些信息保持一致。
(2)移除中間節(jié)點:利用節(jié)點序號在鏈表中查找待移除節(jié)點,設(shè)置當前節(jié)點的前一個節(jié)點的通知信號作為下一個節(jié)點的等待信號,依次調(diào)整后續(xù)節(jié)點序號,最后在鏈表中移除該節(jié)點。
(3)插入新中間節(jié)點:利用節(jié)點序號在鏈表中查找插入位置,設(shè)置當前節(jié)點的前一個節(jié)點的通知信號作為該節(jié)點的等待信號,設(shè)置當前節(jié)點的通知信號為下一個節(jié)點的等待信號,依次調(diào)整后續(xù)節(jié)點序號。
(4)更換目的節(jié)點:復(fù)制原目的節(jié)點的等待信號和節(jié)點序號,將節(jié)點鏈表中最后一個節(jié)點刪除插入新目的節(jié)點。
在一次更新操作時,可能執(zhí)行以上四種調(diào)整方式中的任意一種或者任意多種,具體采用哪種根據(jù)實際情況而定,本申請對此不作具體限定。
另外,本申請發(fā)明人還考慮到,在對業(yè)務(wù)的數(shù)據(jù)進行處理時,可能會出現(xiàn)在某一個環(huán)節(jié)數(shù)據(jù)處理異?;蛘叱鲥e,但系統(tǒng)還會觸發(fā)下一個環(huán)節(jié)的處理,直到完成整個處理流程,這樣,既不能夠及時發(fā)現(xiàn)數(shù)據(jù)異常的問題,又會浪費系統(tǒng)資源。
為了解決上述問題,本申請還提供了對應(yīng)的解決方法,該方法具體是在上述圖1所示方法的基礎(chǔ)上,還增加如下步驟:
所述節(jié)點判斷數(shù)據(jù)的有效性,如果數(shù)據(jù)無效,則所述節(jié)點通知所述控制管道回收數(shù)據(jù),并控制所述節(jié)點中的目的節(jié)點將錯誤結(jié)果通知給應(yīng)用層。
在實際應(yīng)用中,根據(jù)業(yè)務(wù)的實際需求來設(shè)置數(shù)據(jù)有效性的標準,所有節(jié)點可以基于該標準來判斷數(shù)據(jù)的有效性。比如,數(shù)據(jù)長度大小標準、數(shù)據(jù)關(guān)鍵字段信息標準等等。本申請對具體的標準內(nèi)容不作任何限定。
通過這種方式,可以及時地發(fā)現(xiàn)數(shù)據(jù)是否異常,進而能夠在第一時間通知應(yīng)用層數(shù)據(jù)處理異常,另外,還能夠盡早回收數(shù)據(jù),以提高數(shù)據(jù)在控制管道中的流轉(zhuǎn)效率,盡可能地少占用系統(tǒng)資源。
以上對本申請?zhí)峁┑囊环N共享內(nèi)存管理方法進行了解釋說明。
下面對本申請?zhí)峁┑囊环N共享內(nèi)存管理裝置進行解釋說明。
參見圖4,圖4是本申請?zhí)峁┑囊环N共享內(nèi)存管理裝置的結(jié)構(gòu)圖,該裝置包括:控制管道創(chuàng)建及節(jié)點掛載模塊401和數(shù)據(jù)處理模塊402;下面基于該裝置的工作原理對各單元的功能以及連接關(guān)系進行解釋說明。
控制管道創(chuàng)建及節(jié)點掛載模塊401,用于針對業(yè)務(wù)創(chuàng)建共享內(nèi)存的控制管道,將實現(xiàn)所述業(yè)務(wù)的節(jié)點掛接在所述控制管道,所述節(jié)點包括:由不同的進程實現(xiàn)的功能節(jié)點,一個進程包括一個或多個功能節(jié)點;
數(shù)據(jù)處理模塊402,用于當接收到所述業(yè)務(wù)的待處理數(shù)據(jù)時,通過所述控制管道控制所述節(jié)點之間傳遞處理所述待處理數(shù)據(jù)所使用的共享內(nèi)存,以實現(xiàn)對所述待處理數(shù)據(jù)的處理。
可選的,所述數(shù)據(jù)處理模塊,可以包括:
共享內(nèi)存?zhèn)鬟f處理子模塊,用于當接收到所述業(yè)務(wù)的待處理數(shù)據(jù)時,通過所述控制管道控制所述節(jié)點之間按照內(nèi)核事件通知機制傳遞處理所述待處理數(shù)據(jù)所使用的共享內(nèi)存,以實現(xiàn)對所述待處理數(shù)據(jù)的處理。
可選的,所述共享內(nèi)存?zhèn)鬟f處理子模塊,可以包括:
共享內(nèi)存申請子模塊,用于通過所述控制管道控制所述節(jié)點中的源節(jié)點向系統(tǒng)申請共享內(nèi)存;
節(jié)點數(shù)據(jù)處理子模塊,用于通過所述控制管道控制所述節(jié)點中的源節(jié)點對申請到的共享內(nèi)存進行數(shù)據(jù)初始化,并控制所述節(jié)點中的源節(jié)點和中間節(jié)點都通過內(nèi)核事件信號通知機制向所述節(jié)點中的下一個節(jié)點傳遞所述共享內(nèi)存和處理后的數(shù)據(jù),以完成對所述待處理數(shù)據(jù)的處理。
可選的,所述裝置還可以包括:
緩存池創(chuàng)建模塊,用于針對所述業(yè)務(wù)創(chuàng)建緩存池,根據(jù)所述業(yè)務(wù)的需求向系統(tǒng)申請多個共享內(nèi)存,在所述緩存池中存儲所述多個共享內(nèi)存的地址;則所述待處理數(shù)據(jù)所使用的共享內(nèi)存是由所述節(jié)點中的源節(jié)點從所述緩存池中申請的一個共享內(nèi)存。
可選的,所述緩存池創(chuàng)建模塊,可以包括:
存儲子模塊,用于在所述緩存池中使用鏈表存儲所述多個共享內(nèi)存的地址。
可選的,所述裝置還可以包括:共享內(nèi)存回收模塊,用于當所述待處理數(shù)據(jù)處理完畢時,回收使用后的共享內(nèi)存。
進一步地,所述共享內(nèi)存回收模塊,可以包括:
判斷子模塊,用于判斷緩存池中當前空閑的共享內(nèi)存數(shù)量是否小于預(yù)設(shè)閾值;如果是,進入重新存儲子模塊;如果否,釋放子模塊;
重新存儲子模塊,用于將所述待處理數(shù)據(jù)所使用的共享內(nèi)存清理后重新存儲;
釋放子模塊,用于將所述待處理數(shù)據(jù)所使用的共享內(nèi)存釋放掉。
可選的,所述裝置還可以包括:
有效性判斷模塊,用于控制所述節(jié)點判斷數(shù)據(jù)的有效性,如果數(shù)據(jù)無效,則所述節(jié)點通知所述控制管道回收數(shù)據(jù),并控制所述節(jié)點中的目的節(jié)點將錯誤結(jié)果通知給應(yīng)用層。
可選的,所述控制管道創(chuàng)建及節(jié)點掛載模塊,可以包括:
節(jié)點掛載子模塊,用于根據(jù)所述業(yè)務(wù)的數(shù)據(jù)處理順序,將實現(xiàn)所述業(yè)務(wù)的所述節(jié)點中的源節(jié)點、中間節(jié)點和目的節(jié)點的實例化地址依次存儲至所述控制管道維護的節(jié)點鏈表中,并使用回調(diào)機制與所述控制管道建立通知關(guān)系。
可選的,所述裝置還可以包括:
節(jié)點調(diào)整模塊,用于接收所述控制管道的節(jié)點掛載信息,根據(jù)接收到的節(jié)點掛載信息更新所述控制管道上掛載的節(jié)點。
本申請?zhí)峁┑纳鲜鲅b置,考慮到多進程軟件系統(tǒng)中業(yè)務(wù)處理是依賴于進程間的相互關(guān)聯(lián)的數(shù)據(jù)處理來實現(xiàn)的,提出了針對一種業(yè)務(wù)創(chuàng)建共享內(nèi)存的控制管道,將實現(xiàn)所述業(yè)務(wù)的節(jié)點掛接在所述控制管道的方式,其中,節(jié)點包括不同進程實現(xiàn)的功能節(jié)點,這種將進程功能節(jié)點化的方式,可以使不同的業(yè)務(wù)共用同一進程的不同功能節(jié)點,能夠更加靈活地使用已有進程;再者這種節(jié)點掛接方式,方便根據(jù)業(yè)務(wù)需求動態(tài)調(diào)整數(shù)據(jù)處理流程,能夠提高系統(tǒng)適用性。
當該業(yè)務(wù)有數(shù)據(jù)需要處理時,通過所述控制管道控制所述節(jié)點之間傳遞處理所述待處理數(shù)據(jù)所使用的共享內(nèi)容,以實現(xiàn)對所述待處理數(shù)據(jù)的處理;當所述待處理數(shù)據(jù)處理完畢時,回收使用后的共享內(nèi)存。該方法不需要依賴進程間的直接地調(diào)用,而是通過業(yè)務(wù)的控制管道控制節(jié)點實現(xiàn)對數(shù)據(jù)的處理,從而能夠降低進程間的耦合性。
此外,本申請?zhí)峁┑难b置還可以針對所述業(yè)務(wù)創(chuàng)建緩存池,根據(jù)所述業(yè)務(wù)的需求向系統(tǒng)申請多個共享內(nèi)存,在所述緩存池中存儲所述多個共享內(nèi)存的地址;這樣,通過共享內(nèi)存的緩存功能,可以支持多組數(shù)據(jù)的處理,減少頻繁動態(tài)申請和釋放內(nèi)存造成的系統(tǒng)內(nèi)存激增現(xiàn)象。
進一步地,本申請還提供了一種共享內(nèi)存管理系統(tǒng),該系統(tǒng)可以包括:至少一個處理器(例如CPU)和至少一個存儲器。
其中,處理器用于執(zhí)行存儲器中存儲的可執(zhí)行指令,例如計算機程序。
存儲器可能包含高速隨機存取存儲器(RAM:Random Access Memory),也可能還包括非不穩(wěn)定的存儲器(non-volatile memory),例如至少一個磁盤存儲器。通過至少一個網(wǎng)絡(luò)接口(可以是有線或者無線)實現(xiàn)該系統(tǒng)網(wǎng)關(guān)與至少一個其他網(wǎng)元之間的通信連接。
當然,所述系統(tǒng)還可以包括至少一個網(wǎng)絡(luò)接口或者其他通信接口和至少一個通信總線,用于實現(xiàn)系統(tǒng)內(nèi)各個部件之間的連接通信。
參見圖5,在一些實施方式中,存儲器中存儲了可操作指令,程序指令可以被處理器執(zhí)行。其中,可操作指令包括:
針對業(yè)務(wù)創(chuàng)建共享內(nèi)存的控制管道,將實現(xiàn)所述業(yè)務(wù)的節(jié)點掛接在所述控制管道,所述節(jié)點包括:由不同的進程實現(xiàn)的功能節(jié)點,一個進程包括一個或多個功能節(jié)點;
當接收到所述業(yè)務(wù)的待處理數(shù)據(jù)時,通過所述控制管道控制所述節(jié)點之間傳遞處理所述待處理數(shù)據(jù)所使用的共享內(nèi)存,以實現(xiàn)對所述待處理數(shù)據(jù)的處理。當然,存儲器中存儲的可操作指令也還可以包括上述方法實施例中描述的算法步驟。
如圖5所示,共享內(nèi)存管理系統(tǒng)500包括:處理器501和存儲器502,存儲器502中存儲有上述可操作指令,處理器501從存儲器502中讀取并執(zhí)行這些指令,以實現(xiàn)相應(yīng)功能。專業(yè)人員應(yīng)該還可以進一步意識到,結(jié)合本文中所公開的實施例描述的各示例的模塊及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認為超出本申請的范圍。
結(jié)合本文中所公開的實施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實施。軟件模塊可以置于隨機存儲器(RAM)、內(nèi)存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。
以上所述的具體實施方式,對本申請的目的、技術(shù)方案和有益效果進行了進一步詳細說明,所應(yīng)理解的是,以上所述僅為本申請的具體實施方式而已,并不用于限定本申請的保護范圍,凡在本申請的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本申請的保護范圍之內(nèi)。