System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及电子信息,特别是涉及一种基于共享内存的进程间通信方法。
技术介绍
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所述的方法,其特征在于,所述在所述共享内存空间中对节点间的消息传输队列...
【专利技术属性】
技术研发人员:周仁才,陆晓波,万阳,
申请(专利权)人:东方证券股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。