午夜毛片免费看,老师老少妇黄色网站,久久本道综合久久伊人,伊人黄片子

基于共享內(nèi)存的進(jìn)程間通信方法與流程

文檔序號:39329335發(fā)布日期:2024-09-10 11:35閱讀:13來源:國知局
基于共享內(nèi)存的進(jìn)程間通信方法與流程

本技術(shù)涉及電子信息,特別是涉及一種基于共享內(nèi)存的進(jìn)程間通信方法。


背景技術(shù):

1、計算機(jī)信息系統(tǒng)建設(shè)中,進(jìn)程間通信(ipc,inter-process?communication)是一個核心概念和關(guān)鍵技術(shù),它確保了在多進(jìn)程環(huán)境中,不同進(jìn)程能夠有效地共享信息、協(xié)調(diào)執(zhí)行和協(xié)同工作。選擇合適的進(jìn)程間通信方式對于系統(tǒng)的穩(wěn)定、高效運行至關(guān)重要。

2、消息路由(message?routing)是分布式系統(tǒng)中的一項核心功能,負(fù)責(zé)根據(jù)預(yù)定義規(guī)則和策略,在不同組件或服務(wù)之間精確高效地傳輸和定向消息流。

3、金融業(yè)務(wù)領(lǐng)域?qū)?shù)據(jù)處理的實時性和準(zhǔn)確性要求極為嚴(yán)苛,尤其在高頻交易、實時風(fēng)控、大數(shù)據(jù)分析等諸多場景中,高效、低延遲的通信機(jī)制是系統(tǒng)穩(wěn)定運行和高效決策的關(guān)鍵基礎(chǔ)。早期的金融交易系統(tǒng),廣泛應(yīng)用傳統(tǒng)的基于tcp/ip協(xié)議棧的進(jìn)程間通訊方式(如tcp、udp等)。但是,隨著金融市場交易速度加快、業(yè)務(wù)邏輯復(fù)雜度提升以及海量數(shù)據(jù)處理需求的增長,原有的通訊方式逐漸暴露出了性能瓶頸。

4、為了應(yīng)對這一挑戰(zhàn),現(xiàn)代金融應(yīng)用開始積極探索并采用更為先進(jìn)高效的通信技術(shù),其中之一便是共享內(nèi)存通信機(jī)制。通過直接在物理內(nèi)存層面實現(xiàn)多個進(jìn)程間的高速數(shù)據(jù)交互,共享內(nèi)存能夠顯著降低數(shù)據(jù)傳輸時延,提高系統(tǒng)吞吐量,并且減少因網(wǎng)絡(luò)i/o帶來的潛在不確定性。

5、然而,僅僅依靠原始的共享內(nèi)存技術(shù)還不足以完全滿足金融領(lǐng)域的復(fù)雜的多元化需求,特別是在分布式架構(gòu)環(huán)境下,更是需要提供一種新型的通信解決方案。


技術(shù)實現(xiàn)思路

1、基于此,本技術(shù)針對上述技術(shù)問題,提供一種基于共享內(nèi)存的進(jìn)程間通信方法及系統(tǒng),實現(xiàn)進(jìn)程間消息有序傳遞、消息分發(fā)策略及持久化存儲功能。該方案能夠結(jié)合共享內(nèi)存的優(yōu)勢,并且具備智能消息路由功能,從而提供有序的消息傳遞、靈活的消息分發(fā)策略及所需的持久化存儲支持,以保證系統(tǒng)的可靠性和擴(kuò)展性。

2、第一方面,本技術(shù)實施例提供了一種基于共享內(nèi)存的進(jìn)程間通信方法,所述通信方法包括:

3、基于系統(tǒng)中的節(jié)點信息以及配置信息創(chuàng)建消息路由分發(fā)表;

4、創(chuàng)建共享內(nèi)存空間,基于所述消息路由分發(fā)表,在所述共享內(nèi)存空間中對節(jié)點間的消息傳輸隊列進(jìn)行空間分配與初始化;

5、響應(yīng)于發(fā)送進(jìn)程中的數(shù)據(jù)發(fā)送請求,基于發(fā)送數(shù)據(jù)包頭協(xié)議中指定的消息編號在所述消息路由分發(fā)表中的配置信息確定需要寫入的目標(biāo)消息傳輸隊列,并將消息分別寫入共享內(nèi)存消息隊列并更新寫入偏移;

6、接收進(jìn)程持續(xù)檢查消息傳輸隊列,當(dāng)讀取偏移與寫入偏移之間數(shù)據(jù)長度大于寫入消息包頭協(xié)議中指定的長度時,所述接收進(jìn)程從所述共享內(nèi)存消息隊列讀取偏移處讀取指定長度的數(shù)據(jù),并將數(shù)據(jù)傳遞給上層應(yīng)用,最后,所述接收進(jìn)程更新隊列讀取偏移并重復(fù)本步驟。

7、在一些實施例中,所述響應(yīng)于發(fā)送進(jìn)程中的數(shù)據(jù)發(fā)送請求,基于發(fā)送數(shù)據(jù)包頭協(xié)議中指定的消息編號在所述消息路由分發(fā)表中的配置信息確定需要寫入的目標(biāo)消息傳輸隊列,并將消息分別寫入共享內(nèi)存消息隊列并更新寫入偏移,包括:

8、確定寫入的消息隊列是否有足夠的剩余空間來寫入指定的消息;

9、若隊列尾部剩余空間不足,將所述隊列尾部剩余空間置為無效數(shù)據(jù),并重新計算剩余空間;

10、若隊列總體剩余空間不足,將所述隊列總體剩余空間置為無效數(shù)據(jù),并置存在后續(xù)內(nèi)存塊標(biāo)識;

11、創(chuàng)建新的共享內(nèi)存空間,并在新的共享內(nèi)存空間上進(jìn)行新的消息傳輸隊列空間分配和初始化;

12、將數(shù)據(jù)寫入新創(chuàng)建的新的共享內(nèi)存空間消息傳輸隊列,并更新寫入偏移。

13、在一些實施例中,所述接收進(jìn)程持續(xù)檢查消息傳輸隊列,包括:

14、接收進(jìn)程持續(xù)檢查消息傳輸隊列的可讀空間大小,剔除無效數(shù)據(jù)空間,計算有效消息大小,并對消息進(jìn)行讀取;

15、若消息傳輸隊列無有效消息,檢查隊列后續(xù)內(nèi)存塊標(biāo)識,若標(biāo)識為真,則釋放當(dāng)前共享內(nèi)存空間,并切換至下一共享內(nèi)存消息隊列。

16、在一些實施例中,消息路由分發(fā)表的建立步驟包括:

17、從配置文件中加載整個系統(tǒng)的節(jié)點配置信息,所述節(jié)點配置信息包括節(jié)點名稱以及節(jié)點編號;

18、從所述配置文件中加載所有節(jié)點的消息編號訂閱信息,按照以消息編號為主鍵,以訂閱該消息的節(jié)點編號的集合為值,建立系統(tǒng)級別的消息路由分發(fā)表。

19、在一些實施例中,創(chuàng)建共享內(nèi)存空間,并基于所述消息路由分發(fā)表,在所述共享內(nèi)存空間中對節(jié)點間的消息傳輸隊列進(jìn)行空間分配與初始化,包括:

20、以兩兩節(jié)點間的設(shè)備號為主鍵,打開或創(chuàng)建共享內(nèi)存空間,并將所述共享內(nèi)存映射到進(jìn)程地址空間;

21、基于所述共享內(nèi)存空間對所述消息隊列進(jìn)行初始化;所述消息隊列內(nèi)存布局分為頭部固定大小的內(nèi)存管理塊與存放數(shù)據(jù)的數(shù)據(jù)塊;其中,所述內(nèi)存管理塊用于實現(xiàn)所述消息隊列在多線程場景下的讀寫一致性以及自動擴(kuò)容的特性。

22、在一些實施例中,所述在所述共享內(nèi)存空間中對節(jié)點間的消息傳輸隊列進(jìn)行空間分配與初始化,包括:

23、確定隊列長度len;

24、確定讀寫偏移掩碼mask=len-1,用于計算讀寫實際偏移量;

25、寫入偏移w_offset,記錄下一個可寫的內(nèi)存地址;

26、讀取偏移r_offset,記錄下一個待讀消息的內(nèi)存地址;

27、后續(xù)內(nèi)存塊標(biāo)識,記錄是否存在后續(xù)內(nèi)存塊;

28、基于所述消息路由分發(fā)表重復(fù)上述步驟,完成節(jié)點間消息隊列的創(chuàng)建與初始化。

29、在一些實施例中,響應(yīng)于發(fā)送進(jìn)程中的數(shù)據(jù)發(fā)送請求,基于發(fā)送數(shù)據(jù)包頭協(xié)議中指定的消息編號在所述消息路由分發(fā)表中的配置信息確定需要寫入的目標(biāo)消息傳輸隊列,并將消息分別寫入消息隊列并更新寫入偏移,包括:

30、從待發(fā)送數(shù)據(jù)包頭中讀取消息號,根據(jù)所述消息號從所述消息路由分發(fā)表中查找所有接收該消息的節(jié)點,并根據(jù)本節(jié)點設(shè)備號與接收節(jié)點的設(shè)備號確定需要寫入的消息隊列的集合;

31、針對確定的需要寫入的每一個消息隊列,檢查當(dāng)前內(nèi)存塊是否擁有足夠的剩余空間;

32、若剩余空間充足,將待發(fā)送數(shù)據(jù)寫入消息隊列內(nèi)存管理塊中寫入偏移指向的內(nèi)存地址空間,當(dāng)剩余空間不足時,發(fā)送進(jìn)程需繼續(xù)創(chuàng)建并映射新的共享內(nèi)存空間,并重復(fù)上述數(shù)據(jù)寫入步驟;

33、根據(jù)寫入數(shù)據(jù)長度使用cas原子操作嘗試更新寫入偏移,若更新不成功,則需要重新執(zhí)行上述操作,直到成功為止。

34、在一些實施例中,所述檢查當(dāng)前內(nèi)存塊是否擁有足夠的寫入剩余空間的步驟,包括:

35、假設(shè)寫入數(shù)據(jù)長度為l1,數(shù)據(jù)包頭長度為l2,

36、step1,計算寫入實際偏移wo=w_offset?mod?mask;

37、step2,計算隊列尾部空間tail_size=len-wo;

38、step3,判斷隊列尾部空間大小,若tail_size小于l2,w_offset增加tail_size,并重復(fù)step1;

39、step4,判斷隊列尾部空間大小,若tail_size小于l1,在wo指向的內(nèi)存塊寫入指示后續(xù)長度為tail_size的無效數(shù)據(jù)的包頭,w_offset增加tail_size,并重復(fù)step1;

40、step5,計算可寫入空間大小(len-w_offset+r_offset)與數(shù)據(jù)包長度l1的大小關(guān)系。

41、在一些實施例中,接收進(jìn)程持續(xù)檢查消息傳輸隊列,當(dāng)讀取偏移與寫入偏移之間數(shù)據(jù)長度大于寫入消息包頭協(xié)議中指定的長度時,所述接收進(jìn)程從所述共享內(nèi)存消息隊列讀取偏移處讀取指定長度的數(shù)據(jù),并將數(shù)據(jù)傳遞給上層應(yīng)用,最后,所述接收進(jìn)程更新隊列讀取偏移并重復(fù)本步驟,包括:

42、接收節(jié)點輪詢消息隊列內(nèi)存管理塊,通過寫入偏移和讀取偏移檢查當(dāng)前內(nèi)存塊是否有未訪問數(shù)據(jù);

43、若存在未訪問數(shù)據(jù),則訪問讀取偏移指向的內(nèi)存數(shù)據(jù),并在訪問結(jié)束后根據(jù)數(shù)據(jù)長度更新讀取偏移,使其指向下一待讀消息,此時,發(fā)送進(jìn)程可將新的待發(fā)送數(shù)據(jù)寫入已被訪問數(shù)據(jù)的共的享內(nèi)存空間中;

44、若接收隊列不存在未訪問數(shù)據(jù),則根據(jù)后續(xù)內(nèi)存塊標(biāo)識判斷是否存在后續(xù)共享內(nèi)存塊,若存在后續(xù)共享內(nèi)存塊,則釋放當(dāng)前共享內(nèi)存空間,打開并映射下一個共享內(nèi)存空間,加載共享內(nèi)存中的消息隊列繼續(xù)進(jìn)行輪詢未訪問數(shù)據(jù)。

45、在一些實施例中,所述檢查當(dāng)前內(nèi)存塊是否有未訪問數(shù)據(jù)的步驟包括:

46、假設(shè)數(shù)據(jù)包頭長度為l2;

47、step1,計算讀取實際偏移ro=r_offset?mod?mask;

48、step2,計算隊列尾部空間tail_size=len-ro;

49、step3,判斷隊列尾部空間大小,若tail_size小于l2,r_offset增加tail_size,并重復(fù)step1;

50、step4,訪問ro指向的內(nèi)存塊的數(shù)據(jù),根據(jù)數(shù)據(jù)包頭確認(rèn)本塊數(shù)據(jù)是否為無效數(shù)據(jù),若是,r_offset增加本塊數(shù)據(jù)塊長度,并重復(fù)step1;

51、step5,若w_offset大于r_offset,訪問ro執(zhí)行內(nèi)存塊的數(shù)據(jù)包頭部分?jǐn)?shù)據(jù),返回包頭指示的未訪問數(shù)據(jù)的數(shù)據(jù)長度,否則返回0。

52、在一些實施例中,所述方法還包括:

53、通過設(shè)置接收進(jìn)程不同運行模式來合理分配系統(tǒng)資源;

54、如果接收進(jìn)程配置為普通模式,當(dāng)處理完接收隊列中所有數(shù)據(jù)后,主動讓出cpu資源,等待系統(tǒng)下次調(diào)用;

55、如果接收進(jìn)程配置為忙碌模式,則不停輪詢消息隊列中是否有新的數(shù)據(jù)到達(dá),直到被cpu中斷。

56、在一些實施例中,所述方法還包括:

57、通過打開持久化開關(guān)來實現(xiàn)全局?jǐn)?shù)據(jù)持久化功能;

58、當(dāng)打開持久化開關(guān)后,響應(yīng)于發(fā)送進(jìn)程的數(shù)據(jù)發(fā)送請求,將數(shù)據(jù)寫入消息路由分發(fā)表中指定的消息隊列外,額外將數(shù)據(jù)寫入持久化消息隊列;作為持久化服務(wù)的接收進(jìn)程輪詢持久化消息隊列,并進(jìn)行后續(xù)數(shù)據(jù)持久化操作。

59、在一些實施例中,所述方法還包括:

60、所述系統(tǒng)包含應(yīng)用進(jìn)程、持久化進(jìn)程、消息總線sdk與消息路由表;

61、應(yīng)用進(jìn)程之間依賴消息總線sdk與消息路由表,執(zhí)行如上述方法實施例中的基于共享內(nèi)存的進(jìn)程間通信方法的步驟,具體實現(xiàn)方式可參見方法實施例。

62、在一些實施例中,所述通信方法還包括:

63、基于消息路由模塊生成的消息路由分發(fā)表創(chuàng)建共享內(nèi)存空間,在共享內(nèi)存空間上進(jìn)行節(jié)點間消息隊列的創(chuàng)建與初始化,并將消息隊列地址映射給多個目標(biāo)進(jìn)程,并提供消息寫入和讀取接口。

64、本技術(shù)還提供一種基于共享內(nèi)存的進(jìn)程間通信系統(tǒng),所述通信系統(tǒng)包括:消息路由模塊、消息總線模塊、消息發(fā)送模塊、消息接收模塊與數(shù)據(jù)持久化模塊。

65、其中,消息路由模塊,用于從指定配置文件中加載整個系統(tǒng)的節(jié)點配置信息與消息編號訂閱信息,生成系統(tǒng)級別的消息路由分發(fā)表;

66、消息總線模塊,用于上述實施例中提供的基于共享內(nèi)存的進(jìn)程間通信方法;

67、消息發(fā)送模塊,響應(yīng)發(fā)送進(jìn)程的數(shù)據(jù)發(fā)送請求,根據(jù)上述消息總線模塊提供的消息寫入接口,將發(fā)送數(shù)據(jù)寫入目標(biāo)隊列;

68、消息接收模塊,通過上述消息總線模塊提供的讀取接口,注冊回調(diào)函數(shù)實現(xiàn)消息的實時讀??;

69、數(shù)據(jù)持久化模塊,基于上述消息接收模塊,通過實時接收持久化消息隊列數(shù)據(jù),然后轉(zhuǎn)存至本地文件,實現(xiàn)數(shù)據(jù)持久化功能。

70、本技術(shù)還提供一種計算機(jī)設(shè)備,包括存儲器和處理器,所述存儲器存儲有計算機(jī)程序,所述處理器執(zhí)行所述計算機(jī)程序時實現(xiàn)上述任一項實施例中提供的基于共享內(nèi)存的通信方法的步驟。

71、一種計算機(jī)可讀存儲介質(zhì),其上存儲有計算機(jī)程序,所述計算機(jī)程序被處理器執(zhí)行時上述任一項實施例中提供的基于共享內(nèi)存的通信方法的步驟。

72、上述基于共享內(nèi)存的通信方法、系統(tǒng)、計算機(jī)設(shè)備和存儲介質(zhì),通過結(jié)合共享內(nèi)存讀寫性能優(yōu)勢與消息路由靈活分發(fā)的特點,提供了有序的消息傳遞、靈活的消息分發(fā)策略及可能的持久化存儲支持,保證了系統(tǒng)的可靠性和擴(kuò)展性。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1