【技術實現步驟摘要】
本申請涉及電子信息,特別是涉及一種基于共享內存的進程間通信方法。
技術介紹
1、計算機信息系統建設中,進程間通信(ipc,inter-process?communication)是一個核心概念和關鍵技術,它確保了在多進程環境中,不同進程能夠有效地共享信息、協調執行和協同工作。選擇合適的進程間通信方式對于系統的穩定、高效運行至關重要。
2、消息路由(message?routing)是分布式系統中的一項核心功能,負責根據預定義規則和策略,在不同組件或服務之間精確高效地傳輸和定向消息流。
3、金融業務領域對數據處理的實時性和準確性要求極為嚴苛,尤其在高頻交易、實時風控、大數據分析等諸多場景中,高效、低延遲的通信機制是系統穩定運行和高效決策的關鍵基礎。早期的金融交易系統,廣泛應用傳統的基于tcp/ip協議棧的進程間通訊方式(如tcp、udp等)。但是,隨著金融市場交易速度加快、業務邏輯復雜度提升以及海量數據處理需求的增長,原有的通訊方式逐漸暴露出了性能瓶頸。
4、為了應對這一挑戰,現代金融應用開始積極探索并采用更為先進高效的通信技術,其中之一便是共享內存通信機制。通過直接在物理內存層面實現多個進程間的高速數據交互,共享內存能夠顯著降低數據傳輸時延,提高系統吞吐量,并且減少因網絡i/o帶來的潛在不確定性。
5、然而,僅僅依靠原始的共享內存技術還不足以完全滿足金融領域的復雜的多元化需求,特別是在分布式架構環境下,更是需要提供一種新型的通信解決方案。
技術實現思路
1、基于此,本申請針對上述技術問題,提供一種基于共享內存的進程間通信方法及系統,實現進程間消息有序傳遞、消息分發策略及持久化存儲功能。該方案能夠結合共享內存的優勢,并且具備智能消息路由功能,從而提供有序的消息傳遞、靈活的消息分發策略及所需的持久化存儲支持,以保證系統的可靠性和擴展性。
2、第一方面,本申請實施例提供了一種基于共享內存的進程間通信方法,所述通信方法包括:
3、基于系統中的節點信息以及配置信息創建消息路由分發表;
4、創建共享內存空間,基于所述消息路由分發表,在所述共享內存空間中對節點間的消息傳輸隊列進行空間分配與初始化;
5、響應于發送進程中的數據發送請求,基于發送數據包頭協議中指定的消息編號在所述消息路由分發表中的配置信息確定需要寫入的目標消息傳輸隊列,并將消息分別寫入共享內存消息隊列并更新寫入偏移;
6、接收進程持續檢查消息傳輸隊列,當讀取偏移與寫入偏移之間數據長度大于寫入消息包頭協議中指定的長度時,所述接收進程從所述共享內存消息隊列讀取偏移處讀取指定長度的數據,并將數據傳遞給上層應用,最后,所述接收進程更新隊列讀取偏移并重復本步驟。
7、在一些實施例中,所述響應于發送進程中的數據發送請求,基于發送數據包頭協議中指定的消息編號在所述消息路由分發表中的配置信息確定需要寫入的目標消息傳輸隊列,并將消息分別寫入共享內存消息隊列并更新寫入偏移,包括:
8、確定寫入的消息隊列是否有足夠的剩余空間來寫入指定的消息;
9、若隊列尾部剩余空間不足,將所述隊列尾部剩余空間置為無效數據,并重新計算剩余空間;
10、若隊列總體剩余空間不足,將所述隊列總體剩余空間置為無效數據,并置存在后續內存塊標識;
11、創建新的共享內存空間,并在新的共享內存空間上進行新的消息傳輸隊列空間分配和初始化;
12、將數據寫入新創建的新的共享內存空間消息傳輸隊列,并更新寫入偏移。
13、在一些實施例中,所述接收進程持續檢查消息傳輸隊列,包括:
14、接收進程持續檢查消息傳輸隊列的可讀空間大小,剔除無效數據空間,計算有效消息大小,并對消息進行讀取;
15、若消息傳輸隊列無有效消息,檢查隊列后續內存塊標識,若標識為真,則釋放當前共享內存空間,并切換至下一共享內存消息隊列。
16、在一些實施例中,消息路由分發表的建立步驟包括:
17、從配置文件中加載整個系統的節點配置信息,所述節點配置信息包括節點名稱以及節點編號;
18、從所述配置文件中加載所有節點的消息編號訂閱信息,按照以消息編號為主鍵,以訂閱該消息的節點編號的集合為值,建立系統級別的消息路由分發表。
19、在一些實施例中,創建共享內存空間,并基于所述消息路由分發表,在所述共享內存空間中對節點間的消息傳輸隊列進行空間分配與初始化,包括:
20、以兩兩節點間的設備號為主鍵,打開或創建共享內存空間,并將所述共享內存映射到進程地址空間;
21、基于所述共享內存空間對所述消息隊列進行初始化;所述消息隊列內存布局分為頭部固定大小的內存管理塊與存放數據的數據塊;其中,所述內存管理塊用于實現所述消息隊列在多線程場景下的讀寫一致性以及自動擴容的特性。
22、在一些實施例中,所述在所述共享內存空間中對節點間的消息傳輸隊列進行空間分配與初始化,包括:
23、確定隊列長度len;
24、確定讀寫偏移掩碼mask=len-1,用于計算讀寫實際偏移量;
25、寫入偏移w_offset,記錄下一個可寫的內存地址;
26、讀取偏移r_offset,記錄下一個待讀消息的內存地址;
27、后續內存塊標識,記錄是否存在后續內存塊;
28、基于所述消息路由分發表重復上述步驟,完成節點間消息隊列的創建與初始化。
29、在一些實施例中,響應于發送進程中的數據發送請求,基于發送數據包頭協議中指定的消息編號在所述消息路由分發表中的配置信息確定需要寫入的目標消息傳輸隊列,并將消息分別寫入消息隊列并更新寫入偏移,包括:
30、從待發送數據包頭中讀取消息號,根據所述消息號從所述消息路由分發表中查找所有接收該消息的節點,并根據本節點設備號與接收節點的設備號確定需要寫入的消息隊列的集合;
31、針對確定的需要寫入的每一個消息隊列,檢查當前內存塊是否擁有足夠的剩余空間;
32、若剩余空間充足,將待發送數據寫入消息隊列內存管理塊中寫入偏移指向的內存地址空間,當剩余空間不足時,發送進程需繼續創建并映射新的共享內存空間,并重復上述數據寫入步驟;
33、根據寫入數據長度使用cas原子操作嘗試更新寫入偏移,若更新不成功,則需要重新執行上述操作,直到成功為止。
34、在一些實施例中,所述檢查當前內存塊是否擁有足夠的寫入剩余空間的步驟,包括:
35、假設寫入數據長度為l1,數據包頭長度為l2,
36、step1,計算寫入實際偏移wo=w_offset?mod?mask;
37、step2,計算隊列尾部空間tail_size=len-wo;
38、step3,判斷隊列尾部空間大小,若tail_size小于l2,w_offset增加本文檔來自技高網...
【技術保護點】
1.一種基于共享內存的進程間通信方法,其特征在于,所述方法包括:
2.根據權利要求1所述的方法,其特征在于,所述響應于發送進程中的數據發送請求,基于發送數據包頭協議中指定的消息編號在所述消息路由分發表中的配置信息確定需要寫入的目標消息傳輸隊列,并將消息分別寫入共享內存消息隊列并更新寫入偏移,包括:
3.根據權利要求1所述的方法,其特征在于,所述接收進程持續檢查消息傳輸隊列,包括:
4.根據權利要求1所述的方法,其特征在于,所述消息路由分發表的建立步驟包括:
5.根據權利要求1所述的方法,其特征在于,創建共享內存空間,并基于所述消息路由分發表,在所述共享內存空間中對節點間的消息傳輸隊列進行空間分配與初始化,包括:
6.根據權利要求5所述的方法,其特征在于,所述在所述共享內存空間中對節點間的消息傳輸隊列進行空間分配與初始化,包括:
7.根據權利要求1所述的方法,其特征在于,響應于發送進程中的數據發送請求,基于發送數據包頭協議中指定的消息編號在所述消息路由分發表中的配置信息確定需要寫入的目標消息傳輸隊列,并將消息分
8.根據權利要求7所述的方法,其特征在于,所述檢查當前內存塊是否擁有足夠的剩余空間,包括:
9.根據權利要求1所述的方法,其特征在于,接收進程持續檢查消息傳輸隊列,當讀取偏移與寫入偏移之間數據長度大于寫入消息包頭協議中指定的長度時,所述接收進程從所述共享內存消息隊列讀取偏移處讀取指定長度的數據,并將數據傳遞給上層應用,最后,所述接收進程更新隊列讀取偏移并重復本步驟,包括:
10.根據權利要求9所述的方法,其特征在于,所述檢查當前內存塊是否有未訪問數據的步驟包括:
...【技術特征摘要】
1.一種基于共享內存的進程間通信方法,其特征在于,所述方法包括:
2.根據權利要求1所述的方法,其特征在于,所述響應于發送進程中的數據發送請求,基于發送數據包頭協議中指定的消息編號在所述消息路由分發表中的配置信息確定需要寫入的目標消息傳輸隊列,并將消息分別寫入共享內存消息隊列并更新寫入偏移,包括:
3.根據權利要求1所述的方法,其特征在于,所述接收進程持續檢查消息傳輸隊列,包括:
4.根據權利要求1所述的方法,其特征在于,所述消息路由分發表的建立步驟包括:
5.根據權利要求1所述的方法,其特征在于,創建共享內存空間,并基于所述消息路由分發表,在所述共享內存空間中對節點間的消息傳輸隊列進行空間分配與初始化,包括:
6.根據權利要求5所述的方法,其特征在于,所述在所述共享內存空間中對節點間的消息傳輸隊列...
【專利技術屬性】
技術研發人員:周仁才,陸曉波,萬陽,
申請(專利權)人:東方證券股份有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。