欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于鏈表的進(jìn)程間消息傳遞方法

文檔序號(hào):6554552閱讀:273來源:國(guó)知局
專利名稱:基于鏈表的進(jìn)程間消息傳遞方法
技術(shù)領(lǐng)域
本發(fā)明涉及進(jìn)程間消息傳遞方法,尤其涉及一種基于鏈表的進(jìn)程間消息傳遞方法。
背景技術(shù)
在現(xiàn)有技術(shù)中,服務(wù)框架由服務(wù)組件和消息事件組成。其中,服務(wù)組件可以為獨(dú)立的進(jìn)程或者線程,每個(gè)服務(wù)組件通常包含一個(gè)輸入消息隊(duì)列和一個(gè)輸出消息隊(duì)列,并且每個(gè)服務(wù)組件知道其下一個(gè)服務(wù)名稱,由此形成一個(gè)邏輯上首尾相接的服務(wù)鏈表。消息事件在流經(jīng)每個(gè)服務(wù)組件后,會(huì)產(chǎn)生新的消息事件輸入下個(gè)銜接的服務(wù)組件。
“消息”是在計(jì)算機(jī)間傳送的數(shù)據(jù)單位。消息可以非常簡(jiǎn)單,例如只包含文本字符串;也可以更復(fù)雜,可能包含嵌入對(duì)象。消息被發(fā)送到隊(duì)列中。“消息隊(duì)列”是在消息的傳輸過程中保存消息的容器。消息隊(duì)列管理器在將消息從它的源中繼到它的目標(biāo)時(shí)充當(dāng)中間人。隊(duì)列的主要目的是提供路由并保證消息的傳遞;消息隊(duì)列會(huì)保留消息,直到可以成功地傳遞它。
在使用套接字SOCKET、管道(FIFO)等進(jìn)程間通信(Inter-ProcessCommunication,IPC)機(jī)制傳遞消息時(shí),消息需要在多個(gè)進(jìn)程間傳遞,通常,每個(gè)處理進(jìn)程都要完成下面的處理環(huán)節(jié)從接收緩沖區(qū)中讀取接收的消息,并解碼成為內(nèi)部數(shù)據(jù)結(jié)構(gòu);完成處理過程,保存處理結(jié)果;把處理后的結(jié)果編碼成為消息流,寫入發(fā)送緩沖區(qū)發(fā)送到對(duì)端進(jìn)程。例如圖1所示,處理進(jìn)程1從接收緩沖區(qū)中拷貝消息數(shù)據(jù),然后需要對(duì)消息數(shù)據(jù)進(jìn)行解碼,對(duì)解碼后的數(shù)據(jù)進(jìn)行相應(yīng)的處理后,再對(duì)經(jīng)過處理后的消息數(shù)據(jù)進(jìn)行編碼,并且拷貝到發(fā)送緩沖區(qū),以便下一個(gè)進(jìn)程(即處理進(jìn)程2)能夠接收消息數(shù)據(jù)。處理進(jìn)程2、處理進(jìn)程3都重復(fù)類似的步驟來對(duì)消息數(shù)據(jù)進(jìn)行處理。
在上述傳統(tǒng)進(jìn)程間消息傳遞機(jī)制中,消息在不同進(jìn)程間傳遞時(shí)都要在緩沖區(qū)和內(nèi)存之間被拷貝,并且消息事件字段的編碼、解碼,在消息并發(fā)數(shù)量和消息事件承載數(shù)據(jù)量較少的情況下,上述操作不會(huì)造成性能上的瓶頸,但是在消息并發(fā)數(shù)量較多或者消息事件承載數(shù)據(jù)量較多的應(yīng)用中(如實(shí)時(shí)計(jì)費(fèi)系統(tǒng)),上述操作頻繁發(fā)生,會(huì)造成系統(tǒng)性能嚴(yán)重下降。
根據(jù)上述描述,可以得出現(xiàn)有技術(shù)的技術(shù)方案存在下列缺點(diǎn)消息在接收緩沖區(qū)、發(fā)送緩沖區(qū)以及內(nèi)存之間多次拷貝,在大數(shù)據(jù)量的情況下數(shù)據(jù)傳輸效率低;每次消息傳遞都要完成編碼或者解碼的過程,消耗系統(tǒng)CPU資源;發(fā)明內(nèi)容本發(fā)明解決的問題是現(xiàn)有技術(shù)中,進(jìn)程間對(duì)消息傳遞的處理消耗了大量資源,導(dǎo)致系統(tǒng)性能下降的情況。本發(fā)明提供了一種能夠提高消息傳輸效率的基于鏈表的進(jìn)程間消息傳遞方法。
本發(fā)明提供的基于鏈表的進(jìn)程間消息傳遞方法包括a)主控進(jìn)程創(chuàng)建消息隊(duì)列,所述消息隊(duì)列包括已分配節(jié)點(diǎn)隊(duì)列和空閑節(jié)點(diǎn)隊(duì)列;b)第一處理進(jìn)程接收來自外部的消息,從消息隊(duì)列中申請(qǐng)空閑節(jié)點(diǎn),并將消息字段首尾鏈接成共享內(nèi)存鏈表,然后發(fā)送該鏈表的頭指針到第二處理進(jìn)程;c)當(dāng)收到第一處理進(jìn)程傳遞的共享內(nèi)存鏈表頭指針后,第二處理進(jìn)程將第一處理進(jìn)程傳遞的指針轉(zhuǎn)換為地址空間內(nèi)的內(nèi)存地址;d)第二處理進(jìn)程訪問所述內(nèi)存地址中的共享內(nèi)存鏈表,在完成處理后將結(jié)果更新到該鏈表中,然后將該鏈表的頭指針發(fā)送到后續(xù)處理進(jìn)程。
根據(jù)上述進(jìn)程間消息傳遞方法,主控進(jìn)程還創(chuàng)建共享內(nèi)存區(qū),所述共享內(nèi)存區(qū)用于存放進(jìn)程間通信的消息數(shù)據(jù)。
根據(jù)上述進(jìn)程間消息傳遞方法,所述共享內(nèi)存區(qū)為消息的每個(gè)字段分配預(yù)定長(zhǎng)度的內(nèi)存塊,根據(jù)上述進(jìn)程間消息傳遞方法,有多個(gè)處理進(jìn)程對(duì)消息進(jìn)行處理。
根據(jù)上述進(jìn)程間消息傳遞方法,處理完的消息節(jié)點(diǎn)被釋放到空閑節(jié)點(diǎn)隊(duì)列中去。
根據(jù)上述進(jìn)程間消息傳遞方法,節(jié)點(diǎn)包括消息隊(duì)列大小、消息隊(duì)列空閑節(jié)點(diǎn)鏈表頭指針和消息隊(duì)列已分配節(jié)點(diǎn)鏈表頭指針。
根據(jù)上述進(jìn)程間消息傳遞方法,在處理進(jìn)程間采用FIFO機(jī)制發(fā)送共享內(nèi)存鏈表的頭指針。
根據(jù)上述進(jìn)程間消息傳遞方法,消息隊(duì)列節(jié)點(diǎn)數(shù)據(jù)包括共享內(nèi)存鏈表的頭指針、共享內(nèi)存鏈表的尾指針和消息數(shù)據(jù)字段個(gè)數(shù)的至少一個(gè)。
特別地,本發(fā)明還提供了一種基于鏈表的計(jì)費(fèi)系統(tǒng)進(jìn)程間消息傳遞方法,包括a)主控進(jìn)程創(chuàng)建消息隊(duì)列,所述消息隊(duì)列包括已分配節(jié)點(diǎn)隊(duì)列和空閑節(jié)點(diǎn)隊(duì)列;b)鑒權(quán)進(jìn)程接收來自外部進(jìn)程的消息,并且從消息隊(duì)列中申請(qǐng)空閑節(jié)點(diǎn),并將消息字段首尾鏈接成共享內(nèi)存鏈表,然后發(fā)送該鏈表的頭指針到計(jì)費(fèi)進(jìn)程;c)當(dāng)收到鑒權(quán)進(jìn)程傳遞的共享內(nèi)存鏈表頭指針后,計(jì)費(fèi)進(jìn)程將鑒權(quán)進(jìn)程傳遞的指針轉(zhuǎn)換為地址空間內(nèi)的內(nèi)存地址;d)計(jì)費(fèi)進(jìn)程訪問所述內(nèi)存地址中的共享內(nèi)存鏈表,在完成處理后把處理后的結(jié)果更新到該鏈表中,然后發(fā)送該鏈表的頭指針到記賬進(jìn)程;
e)記賬進(jìn)程指針轉(zhuǎn)換為地址空間內(nèi)的內(nèi)存地址,訪問所述內(nèi)存地址中的共享內(nèi)存鏈表。
由于本發(fā)明采用基于共享內(nèi)存的消息傳遞技術(shù)和共享內(nèi)存鏈表的數(shù)據(jù)結(jié)構(gòu),有效地提高了在流式服務(wù)處理框架下消息的傳遞效率。
在本發(fā)明中,由于傳遞的數(shù)據(jù)只是鏈表的指針,因此減輕了進(jìn)程間數(shù)據(jù)傳輸?shù)呢?fù)荷,提高了傳輸效率。并且由于鏈表本身具有插入、刪除節(jié)點(diǎn)速度較快且靈活的特性,以及采用動(dòng)態(tài)內(nèi)存鏈表作為消息的數(shù)據(jù)結(jié)構(gòu),因此能夠解決因消息字段數(shù)據(jù)動(dòng)態(tài)更改引起的性能問題。使用鏈表結(jié)構(gòu)可以充分利用計(jì)算機(jī)內(nèi)存空間,實(shí)現(xiàn)靈活的內(nèi)存動(dòng)態(tài)管理。


圖1是現(xiàn)有技術(shù)中IPC機(jī)制消息傳遞示意圖;圖2是本發(fā)明實(shí)例原型系統(tǒng)示意圖;圖3是本發(fā)明實(shí)例的基于鏈表的進(jìn)程間消息傳遞方法的流程圖;圖4是本發(fā)明實(shí)例采用的內(nèi)存池機(jī)制示意圖;圖5是根據(jù)本發(fā)明實(shí)例的計(jì)費(fèi)系統(tǒng)處理框架示意圖;圖6是本發(fā)明實(shí)例在計(jì)費(fèi)系統(tǒng)中的應(yīng)用示意圖;圖7是本發(fā)明在計(jì)費(fèi)系統(tǒng)中消息傳遞方法的流程圖。
具體實(shí)施例方式
圖2是本發(fā)明原型系統(tǒng)示意圖。如圖所示,所述原型系統(tǒng)包括主控進(jìn)程、處理進(jìn)程和外部進(jìn)程。其中,主控進(jìn)程負(fù)責(zé)創(chuàng)建消息隊(duì)列,同時(shí)主控進(jìn)程還對(duì)各處理進(jìn)程進(jìn)行控制。
外部進(jìn)程將消息事件輸入到處理進(jìn)程中,并由主控進(jìn)程和處理進(jìn)程在共享內(nèi)存中維護(hù)該消息隊(duì)列的數(shù)據(jù)結(jié)構(gòu)。所述消息隊(duì)列的數(shù)據(jù)結(jié)構(gòu)包括消息隊(duì)列大小、消息隊(duì)列空閑節(jié)點(diǎn)鏈表頭指針、消息隊(duì)列已分配節(jié)點(diǎn)鏈表頭指針。
在本實(shí)施例中,為了方便描述,只涉及三個(gè)處理進(jìn)程進(jìn)程1、進(jìn)程2和進(jìn)程3。這三個(gè)處理進(jìn)程可以進(jìn)行相應(yīng)的消息處理,關(guān)于消息處理的具體過程根據(jù)不同的應(yīng)用有所不同。例如,三個(gè)消息處理進(jìn)程可以是通信計(jì)費(fèi)系統(tǒng)中的“識(shí)別鑒權(quán)”、“計(jì)費(fèi)”、“記賬”等等處理進(jìn)程。從外部進(jìn)程輸入的消息在三個(gè)處理進(jìn)程之間“流轉(zhuǎn)”并得到處理。在實(shí)際應(yīng)用中,系統(tǒng)可以包括更多的處理進(jìn)程。
圖3是本發(fā)明實(shí)施例的基于共享內(nèi)存鏈表的進(jìn)程間消息傳遞方法的流程圖。在步驟301,主控進(jìn)程創(chuàng)建一個(gè)共享內(nèi)存區(qū)。系統(tǒng)啟動(dòng)時(shí),首先由主控進(jìn)程創(chuàng)建一個(gè)全局的共享內(nèi)存區(qū),共享內(nèi)存的大小根據(jù)系統(tǒng)的處理能力計(jì)算獲得,也可以通過動(dòng)態(tài)增加的方法進(jìn)行調(diào)整。
為了提高內(nèi)存的分配效率,本系統(tǒng)采用了共享內(nèi)存池機(jī)制以實(shí)現(xiàn)共享內(nèi)存的分配和回收管理。如圖4所示,共享內(nèi)存鏈表是本發(fā)明為了解決消息動(dòng)態(tài)更改采用的數(shù)據(jù)結(jié)構(gòu)。消息數(shù)據(jù)由若干個(gè)字段組成,在共享內(nèi)存中為每個(gè)消息數(shù)據(jù)的字段分配固定長(zhǎng)度的內(nèi)存塊,并把這些字段首尾鏈接在一起,就形成了共享內(nèi)存鏈表,每個(gè)已分配節(jié)點(diǎn)存放指向共享內(nèi)存鏈表的頭指針。為了避免在分配較小內(nèi)存塊時(shí)造成的內(nèi)存碎片,本發(fā)明采用了內(nèi)存池技術(shù)。在內(nèi)存池中,具有多個(gè)內(nèi)存塊,在各內(nèi)存塊中具有預(yù)定長(zhǎng)度的存儲(chǔ)單元,如16字節(jié)的內(nèi)存塊、32字節(jié)長(zhǎng)度的內(nèi)存塊、4k字節(jié)長(zhǎng)度的內(nèi)存塊等等。具有不同長(zhǎng)度的消息數(shù)據(jù)的字段分別存儲(chǔ)在相應(yīng)長(zhǎng)度的內(nèi)存塊中。
在步驟302,主控進(jìn)程創(chuàng)建消息隊(duì)列。創(chuàng)建消息隊(duì)列提供了可與各個(gè)處理進(jìn)程交互的資源。消息隊(duì)列是由多個(gè)共享內(nèi)存鏈表組成,其中包括已分配節(jié)點(diǎn)鏈表和空閑節(jié)點(diǎn)鏈表。
在步驟303,處理進(jìn)程1接收來自外部的消息,并且從所述消息隊(duì)列中申請(qǐng)空閑節(jié)點(diǎn)。進(jìn)程1通過SOCKET或者FIFO等IPC機(jī)制接收來自外部進(jìn)程傳遞的消息,并且從消息隊(duì)列中申請(qǐng)一個(gè)空閑節(jié)點(diǎn)。消息隊(duì)列節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)中包括下列信息共享內(nèi)存鏈表的頭指針;共享內(nèi)存鏈表的尾指針;消息數(shù)據(jù)字段個(gè)數(shù)。申請(qǐng)空閑的消息隊(duì)列節(jié)點(diǎn)是為處理后的消息申請(qǐng)內(nèi)存塊。
在步驟304,進(jìn)程1對(duì)從外部進(jìn)程所接收的消息進(jìn)行處理。進(jìn)程1以及后面提到的進(jìn)程2、進(jìn)程3是處理進(jìn)程。對(duì)消息的處理過程根據(jù)不同的應(yīng)用有所不同。例如,三個(gè)消息處理進(jìn)程可以是通信計(jì)費(fèi)系統(tǒng)中的“鑒權(quán)”、“計(jì)費(fèi)”、“記賬”等等處理進(jìn)程。
在步驟305,進(jìn)程1將處理后的消息的字段首尾鏈接成共享內(nèi)存鏈表,然后發(fā)送該鏈表的頭指針到處理進(jìn)程2。再參考圖4,字段1、字段2、字段3、字段4是四個(gè)經(jīng)過進(jìn)程1處理后的字段,其中字段1、字段3、字段4的長(zhǎng)度均為32字節(jié),字段2的長(zhǎng)度為64字節(jié),因此四個(gè)字段分別存儲(chǔ)在32字節(jié)和64字節(jié)長(zhǎng)的內(nèi)存塊里。進(jìn)程1將四個(gè)字段首尾鏈接,形成共享內(nèi)存鏈表,然后采用IPC機(jī)制(例如,F(xiàn)IFO機(jī)制)發(fā)送該鏈表的頭指針(即消息隊(duì)列節(jié)點(diǎn)的指針)到進(jìn)程2。該鏈表的頭指針即進(jìn)程1所申請(qǐng)的空閑節(jié)點(diǎn)的共享內(nèi)存鏈表的頭指針,由于存放了指向共享內(nèi)存鏈表的頭指針,該節(jié)點(diǎn)成為已分配節(jié)點(diǎn)。
在步驟306,當(dāng)收到進(jìn)程1傳遞的共享內(nèi)存鏈表頭指針后,進(jìn)程2將進(jìn)程1傳遞的指針轉(zhuǎn)換為地址空間內(nèi)的內(nèi)存地址。進(jìn)程2將指針數(shù)據(jù)轉(zhuǎn)換為地址空間內(nèi)的內(nèi)存地址。進(jìn)程2通過訪問所述內(nèi)存地址即可獲取存儲(chǔ)在相關(guān)地址中的消息數(shù)據(jù),以便作進(jìn)一步的處理,這樣避免了對(duì)消息數(shù)據(jù)的拷貝,節(jié)約了系統(tǒng)資源。
在步驟307,處理進(jìn)程2訪問所述內(nèi)存地址中的共享內(nèi)存鏈表,對(duì)消息數(shù)據(jù)進(jìn)行相應(yīng)的處理,在完成處理后,將處理后的字段結(jié)果更新到該鏈表中,然后將該鏈表的頭指針發(fā)送到處理進(jìn)程3。
在步驟308,進(jìn)程3通過對(duì)鏈表指針?biāo)成涞膬?nèi)存地址的訪問來獲取共享內(nèi)存鏈表。
在步驟309,進(jìn)程3將處理完的消息節(jié)點(diǎn)釋放到空閑節(jié)點(diǎn)隊(duì)列中去。在本實(shí)施例中,進(jìn)程3是最后一個(gè)處理進(jìn)程,在消息數(shù)據(jù)進(jìn)行處理完成后,可以將已經(jīng)申請(qǐng)的消息隊(duì)列節(jié)點(diǎn)釋放到空閑節(jié)點(diǎn)隊(duì)列中去。
計(jì)費(fèi)系統(tǒng)就是本發(fā)明一種典型的應(yīng)用案例,為了使計(jì)費(fèi)系統(tǒng)有較好的處理性能,需要把數(shù)據(jù)和處理進(jìn)程綁定在同一個(gè)物理主機(jī)上進(jìn)行處理,以方便數(shù)據(jù)就近讀取,提高數(shù)據(jù)讀取效率。
由于通常計(jì)費(fèi)事件中會(huì)包含幾十個(gè)甚至幾百個(gè)計(jì)費(fèi)特征字段,在進(jìn)程間傳遞這些數(shù)據(jù)時(shí),如果采用數(shù)據(jù)拷貝的方法,會(huì)導(dǎo)致系統(tǒng)性能的急劇下降。而且計(jì)費(fèi)系統(tǒng)的每個(gè)處理進(jìn)程在處理過程中都需要不斷的修改計(jì)費(fèi)事件消息的數(shù)據(jù)結(jié)構(gòu)并傳遞給下一個(gè)處理進(jìn)程,例如從原始計(jì)費(fèi)消息中識(shí)別出計(jì)費(fèi)特征字段(如主叫位置、被叫位置、親情號(hào)碼標(biāo)志等),因此在計(jì)費(fèi)系統(tǒng)更適合采用本發(fā)明的指針直接引用的方法。
在如圖5所示的計(jì)費(fèi)系統(tǒng)中,包括了三個(gè)處理進(jìn)程,即鑒權(quán)進(jìn)程、計(jì)費(fèi)進(jìn)程、記賬進(jìn)程。三個(gè)進(jìn)程都受到動(dòng)態(tài)規(guī)則引擎的控制,在本實(shí)施例中,動(dòng)態(tài)規(guī)則引擎是系統(tǒng)的主控進(jìn)程。在實(shí)際計(jì)費(fèi)系統(tǒng)中,會(huì)有多個(gè)處理進(jìn)程進(jìn)行消息數(shù)據(jù)處理。為了便于描述,在本實(shí)施例中,只對(duì)上述鑒權(quán)、計(jì)費(fèi)、記賬進(jìn)程進(jìn)行說明。
首先,將標(biāo)準(zhǔn)話單的消息數(shù)據(jù)輸入到鑒權(quán)進(jìn)程,所述標(biāo)準(zhǔn)話單消息數(shù)據(jù)中包括了話務(wù)的類型、主體、對(duì)象、通話開始時(shí)間、通話位置、業(yè)務(wù)量等特征字段,鑒權(quán)進(jìn)程在對(duì)該消息數(shù)據(jù)進(jìn)行處理后,處理后所得的結(jié)果,例如,產(chǎn)品ID等特征字段被添加到共享內(nèi)存鏈表中,并且將該鏈表的指針發(fā)送到計(jì)費(fèi)進(jìn)程。計(jì)費(fèi)進(jìn)程在獲取鏈表指針?biāo)成涞膬?nèi)存地址中的內(nèi)容后,類似地,在對(duì)消息數(shù)據(jù)字段進(jìn)行進(jìn)一步處理后,將在該步驟產(chǎn)生的結(jié)果(例如,費(fèi)用項(xiàng)、費(fèi)用)添加到共享內(nèi)存鏈表中,并且將該鏈表的指針發(fā)送到下一個(gè)處理進(jìn)程(即記賬進(jìn)程)進(jìn)行處理。
圖7是本發(fā)明在計(jì)費(fèi)系統(tǒng)中消息傳遞方法的流程圖。其中在步驟701,主控進(jìn)程創(chuàng)建一個(gè)共享內(nèi)存區(qū)。共享內(nèi)存的大小根據(jù)系統(tǒng)的處理能力計(jì)算獲得,也可以通過動(dòng)態(tài)增加的方法進(jìn)行調(diào)整。
如圖6所示,為了避免在分配較小內(nèi)存塊時(shí)造成的內(nèi)存碎片,本發(fā)明采用了內(nèi)存池技術(shù),在內(nèi)存池中,具有多個(gè)內(nèi)存塊,在各內(nèi)存塊中具有預(yù)定長(zhǎng)度的存儲(chǔ)單元,具有不同長(zhǎng)度的計(jì)費(fèi)系統(tǒng)的各種消息數(shù)據(jù)的字段分別存儲(chǔ)在相應(yīng)長(zhǎng)度的內(nèi)存塊中。
在步驟702,主控進(jìn)程創(chuàng)建消息隊(duì)列。創(chuàng)建消息隊(duì)列提供了可與各個(gè)處理進(jìn)程交互的資源。消息隊(duì)列是由多個(gè)共享內(nèi)存鏈表組成,其中包括已分配節(jié)點(diǎn)鏈表和空閑節(jié)點(diǎn)鏈表。
在步驟703,鑒權(quán)進(jìn)程接收來自外部進(jìn)程的標(biāo)準(zhǔn)話單消息數(shù)據(jù),并且從所述消息隊(duì)列中申請(qǐng)空閑節(jié)點(diǎn)。所述標(biāo)準(zhǔn)話單消息數(shù)據(jù)中包括了話務(wù)的類型、主體、對(duì)象、通話開始時(shí)間、通話位置、業(yè)務(wù)量等特征字段。鑒權(quán)進(jìn)程通過SOCKET或者FIFO等IPC機(jī)制接收來自外部進(jìn)程傳遞的標(biāo)準(zhǔn)話單消息,從消息隊(duì)列中申請(qǐng)一個(gè)空閑節(jié)點(diǎn),消息隊(duì)列節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)中通常包括下列信息共享內(nèi)存鏈表的頭指針;共享內(nèi)存鏈表的尾指針;消息數(shù)據(jù)字段個(gè)數(shù)。申請(qǐng)空閑的消息隊(duì)列節(jié)點(diǎn)是為處理后的消息申請(qǐng)內(nèi)存塊。
在步驟704,鑒權(quán)進(jìn)程對(duì)從外部進(jìn)程所接收的消息進(jìn)行處理。鑒權(quán)進(jìn)程對(duì)所輸入的標(biāo)準(zhǔn)話單的消息數(shù)據(jù)進(jìn)行識(shí)別鑒權(quán)處理,處理后生成了新的特征字段(如產(chǎn)品ID)。
在步驟705,鑒權(quán)進(jìn)程將處理后的消息字段(包括處理后產(chǎn)生的特征字段以及原先輸入的標(biāo)準(zhǔn)話單消息字段)首尾鏈接成共享內(nèi)存鏈表,然后發(fā)送該鏈表的頭指針到計(jì)費(fèi)進(jìn)程。鑒權(quán)進(jìn)程采用IPC機(jī)制(例如,F(xiàn)IFO機(jī)制)將該鏈表的頭指針(即消息隊(duì)列節(jié)點(diǎn)的指針)發(fā)送到計(jì)費(fèi)進(jìn)程。該鏈表的頭指針即鑒權(quán)進(jìn)程所申請(qǐng)的空閑節(jié)點(diǎn)的共享內(nèi)存鏈表的頭指針,由于存放了指向共享內(nèi)存鏈表的頭指針,該節(jié)點(diǎn)成為已分配節(jié)點(diǎn)。
在步驟706,當(dāng)收到鑒權(quán)進(jìn)程傳遞的共享內(nèi)存鏈表頭指針后,計(jì)費(fèi)進(jìn)程將鑒權(quán)進(jìn)程傳遞的指針轉(zhuǎn)換為地址空間內(nèi)的內(nèi)存地址。計(jì)費(fèi)進(jìn)程將指針數(shù)據(jù)轉(zhuǎn)換為地址空間內(nèi)的內(nèi)存地址,使得計(jì)費(fèi)進(jìn)程可以通過訪問所述內(nèi)存地址獲取存儲(chǔ)在相關(guān)地址中的標(biāo)準(zhǔn)話單消息數(shù)據(jù)以及鑒權(quán)進(jìn)程處理后生成的字段,以便作進(jìn)一步的處理,這樣避免了對(duì)消息數(shù)據(jù)的拷貝,節(jié)約了系統(tǒng)資源。
在步驟707,計(jì)費(fèi)進(jìn)程訪問所述內(nèi)存地址中的共享內(nèi)存鏈表,對(duì)消息數(shù)據(jù)進(jìn)行相應(yīng)的處理,在完成處理后,將處理后生成的字段結(jié)果(例如費(fèi)用項(xiàng)、費(fèi)用等字段)以及原先從鑒權(quán)進(jìn)程輸入的消息數(shù)據(jù)字段更新到該鏈表中,然后將該鏈表的頭指針發(fā)送到記賬進(jìn)程。
在步驟708,記賬進(jìn)程通過對(duì)鏈表指針?biāo)成涞膬?nèi)存地址的訪問來獲取共享內(nèi)存鏈表,并且進(jìn)行相應(yīng)處理,生成例如賬目、金額、累計(jì)項(xiàng)、累計(jì)值等字段。通過相關(guān)的輸出進(jìn)程將處理結(jié)果輸出。
在步驟709,在完成處理后,記賬進(jìn)程將處理完的消息節(jié)點(diǎn)釋放到空閑節(jié)點(diǎn)隊(duì)列中去。作為最后一個(gè)處理進(jìn)程,記賬進(jìn)程在處理完成后需要釋放已經(jīng)申請(qǐng)的消息隊(duì)列節(jié)點(diǎn)到空閑節(jié)點(diǎn)隊(duì)列中去可以進(jìn)一步系統(tǒng)的利用效率。
雖然本發(fā)明公開了上述實(shí)施例,但具體實(shí)施例并不是用來限定本發(fā)明的,任何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),可以作出一些修改和潤(rùn)飾,因此本發(fā)明的保護(hù)范圍應(yīng)當(dāng)以所附的權(quán)利要求書界定的范圍為準(zhǔn)。
權(quán)利要求
1.一種基于鏈表的進(jìn)程間消息傳遞方法,其特征在于,包括a)主控進(jìn)程創(chuàng)建消息隊(duì)列,所述消息隊(duì)列包括已分配節(jié)點(diǎn)隊(duì)列和空閑節(jié)點(diǎn)隊(duì)列;b)第一處理進(jìn)程接收來自外部的消息,從消息隊(duì)列中申請(qǐng)空閑節(jié)點(diǎn),并將消息字段首尾鏈接成共享內(nèi)存鏈表,然后發(fā)送該鏈表的頭指針到第二處理進(jìn)程;c)當(dāng)收到第一處理進(jìn)程傳遞的共享內(nèi)存鏈表頭指針后,第二處理進(jìn)程將第一處理進(jìn)程傳遞的指針轉(zhuǎn)換為地址空間內(nèi)的內(nèi)存地址;d)第二處理進(jìn)程訪問所述內(nèi)存地址中的共享內(nèi)存鏈表,在完成處理后將結(jié)果更新到該鏈表中,然后將該鏈表的頭指針發(fā)送到后續(xù)處理進(jìn)程。
2.根據(jù)權(quán)利要求1所述的進(jìn)程間消息傳遞方法,其特征在于,主控進(jìn)程創(chuàng)建共享內(nèi)存區(qū),所述共享內(nèi)存區(qū)用于存放進(jìn)程間通信的消息數(shù)據(jù)。
3.根據(jù)權(quán)利要求2所述的進(jìn)程間消息傳遞方法,其特征在于,所述共享內(nèi)存區(qū)為消息的每個(gè)字段分配預(yù)定長(zhǎng)度的內(nèi)存塊。
4.根據(jù)權(quán)利要求1所述的進(jìn)程間消息傳遞方法,其特征在于,有多個(gè)處理進(jìn)程對(duì)消息進(jìn)行處理。
5.根據(jù)權(quán)利要求1所述的進(jìn)程間消息傳遞方法,其特征在于,將處理完的消息節(jié)點(diǎn)釋放到空閑節(jié)點(diǎn)隊(duì)列中。
6.根據(jù)權(quán)利要求1所述的進(jìn)程間消息傳遞方法,其特征在于,節(jié)點(diǎn)包括消息隊(duì)列大小、消息隊(duì)列空閑節(jié)點(diǎn)鏈表頭指針和消息隊(duì)列已分配節(jié)點(diǎn)鏈表頭指針。
7.根據(jù)權(quán)利要求1所述的進(jìn)程間消息傳遞方法,其特征在于,在處理進(jìn)程間采用FIFO或者其他IPC機(jī)制發(fā)送共享內(nèi)存鏈表的頭指針。
8.根據(jù)權(quán)利要求1所述的進(jìn)程間消息傳遞方法,其特征在于,消息隊(duì)列節(jié)點(diǎn)數(shù)據(jù)包括共享內(nèi)存鏈表的頭指針、共享內(nèi)存鏈表的尾指針和消息數(shù)據(jù)字段個(gè)數(shù)中的至少一個(gè)。
9.一種基于鏈表的計(jì)費(fèi)系統(tǒng)進(jìn)程間消息傳遞方法,其特征在于,包括a)主控進(jìn)程創(chuàng)建消息隊(duì)列,所述消息隊(duì)列包括已分配節(jié)點(diǎn)隊(duì)列和空閑節(jié)點(diǎn)隊(duì)列;b)鑒權(quán)進(jìn)程接收來自外部進(jìn)程的消息,并且從消息隊(duì)列中申請(qǐng)空閑節(jié)點(diǎn),并將消息字段首尾鏈接成共享內(nèi)存鏈表,然后發(fā)送該鏈表的頭指針到計(jì)費(fèi)進(jìn)程;c)當(dāng)收到鑒權(quán)進(jìn)程傳遞的共享內(nèi)存鏈表頭指針后,計(jì)費(fèi)進(jìn)程將鑒權(quán)進(jìn)程傳遞的指針轉(zhuǎn)換為本進(jìn)程地址空間內(nèi)的內(nèi)存地址;d)計(jì)費(fèi)進(jìn)程訪問所述內(nèi)存地址中的共享內(nèi)存鏈表,在完成處理后把處理后的結(jié)果更新到該鏈表中,然后發(fā)送該鏈表的頭指針到記賬進(jìn)程;e)記賬進(jìn)程指針轉(zhuǎn)換為本進(jìn)程地址空間內(nèi)的內(nèi)存地址,訪問所述內(nèi)存地址中的共享內(nèi)存鏈表。
10.根據(jù)權(quán)利要求9所述的進(jìn)程間消息傳遞方法,其特征在于,主控進(jìn)程創(chuàng)建共享內(nèi)存區(qū),所述共享內(nèi)存區(qū)用于存放進(jìn)程間通信的消息數(shù)據(jù)。
11.根據(jù)權(quán)利要求10所述的進(jìn)程間消息傳遞方法,其特征在于,所述共享內(nèi)存區(qū)為消息的每個(gè)字段分配預(yù)定長(zhǎng)度的內(nèi)存塊。
12.根據(jù)權(quán)利要求9所述的進(jìn)程間消息傳遞方法,其特征在于,將處理完的消息節(jié)點(diǎn)釋放到空閑節(jié)點(diǎn)隊(duì)列中。
13.根據(jù)權(quán)利要求9所述的進(jìn)程間消息傳遞方法,其特征在于,節(jié)點(diǎn)包括消息隊(duì)列大小、消息隊(duì)列空閑節(jié)點(diǎn)鏈表頭指針和消息隊(duì)列已分配節(jié)點(diǎn)鏈表頭指針。
14.根據(jù)權(quán)利要求9所述的進(jìn)程間消息傳遞方法,其特征在于,在各進(jìn)程間采用FIFO或者其他IPC機(jī)制發(fā)送共享內(nèi)存鏈表的頭指針。
15.根據(jù)權(quán)利要求9所述的進(jìn)程間消息傳遞方法,其特征在于,消息隊(duì)列節(jié)點(diǎn)數(shù)據(jù)包括共享內(nèi)存鏈表的頭指針、共享內(nèi)存鏈表的尾指針和消息數(shù)據(jù)字段個(gè)數(shù)中的至少一個(gè)。
全文摘要
本發(fā)明公開了一種基于鏈表的進(jìn)程間消息傳遞方法,包括主控進(jìn)程創(chuàng)建消息隊(duì)列,該消息隊(duì)列包括已分配節(jié)點(diǎn)隊(duì)列和空閑節(jié)點(diǎn)隊(duì)列;第一處理進(jìn)程接收來自外部的消息,從空閑節(jié)點(diǎn)消息隊(duì)列中申請(qǐng)空閑節(jié)點(diǎn),并將消息字段首尾鏈接成共享內(nèi)存鏈表,然后發(fā)送該鏈表的頭指針到第二處理進(jìn)程;當(dāng)收到第一處理進(jìn)程傳遞的共享內(nèi)存鏈表頭指針后,第二處理進(jìn)程將第一處理進(jìn)程傳遞的指針轉(zhuǎn)換為本進(jìn)程地址空間內(nèi)的內(nèi)存地址。第二處理進(jìn)程訪問該內(nèi)存地址中的共享內(nèi)存鏈表,在完成處理后將結(jié)果更新到該鏈表中,然后將該鏈表的頭指針發(fā)送到后續(xù)處理進(jìn)程。采用基于共享內(nèi)存指針的消息傳遞技術(shù)和共享內(nèi)存鏈表的數(shù)據(jù)結(jié)構(gòu),有效提高了在流式服務(wù)處理框架下消息的傳遞效率。
文檔編號(hào)G06F9/46GK1859325SQ20061000748
公開日2006年11月8日 申請(qǐng)日期2006年2月14日 優(yōu)先權(quán)日2006年2月14日
發(fā)明者孟慶光 申請(qǐng)人:華為技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
正安县| 久治县| 株洲县| 紫金县| 沙洋县| 纳雍县| 清河县| 县级市| 黄浦区| 永靖县| 酒泉市| 嘉义市| 上林县| 筠连县| 金沙县| 略阳县| 武冈市| 阳原县| 那坡县| 盐池县| 淮阳县| 乌拉特前旗| 芦山县| 剑阁县| 贡觉县| 景东| 桦甸市| 太湖县| 太白县| 德令哈市| 青川县| 永善县| 湖州市| 迭部县| 漳州市| 松潘县| 泊头市| 喀喇| 星子县| 大城县| 芷江|