基于共享内存的多进程间通信的方法及装置与流程

文档序号:33469446发布日期:2023-03-15 07:51阅读:34来源:国知局
基于共享内存的多进程间通信的方法及装置与流程

1.本技术涉及进程通信技术领域,尤其是涉及一种基于共享内存的多进程间通信的方法及装置。


背景技术:

2.在同一个系统内多进程间的通信方式有很多,常见的有管道、共享内存和socket,而在性能要求比较高的系统中,对进程间通用方式的选择需要综合考虑稳定性、吞吐量和传输时延等方面;经过实验对比分析,从稳定性、吞吐量和传输时延方面出共享内存都优于管道和socket,是最佳的进程间通信方式。
3.但是在多进程通过共享内存进行通信时,由于进程数量较多,在向其它进程通道进行数据写或读时需要遍历大量其它进程地址,增加了数据增加、数据删除、数据查询时间复杂度,从而降低通信效率,提高通信时延。


技术实现要素:

4.为了解决数据增加、数据删除、数据查询时间复杂度高,通信效率低,通信时延高的问题,本技术提供了基于共享内存的多进程间通信的方法及装置。
5.第一方面,本技术提供的一种基于共享内存的多进程间通信的方法采用如下的技术方案:一种基于共享内存的多进程间通信的方法,包括:对通信层面模块下所有实体进行编号得到实体编号;从通道管理器获取模块编号,利用所述模块编号和所述实体编号对每个实体对应的通道进行编号,得到通道的通道编号;其中,所述通道编号包括所述模块编号和所述实体编号;将所述通道编号以通道注册请求的形式发送至所述通道管理器,进行与所述通道编号对应通道的注册;接收所述通道管理器向系统中所有在线进程广播的通道列表;其中,所述通道列表包括每个元素为所述通道编号的二维数组,每个所述通道编号标识一个通道的地址;所述通道管理器根据所述通道注册请求更新所述二维数组中的所述通道编号和对应的地址;利用目的通道的所述通道编号从所述通道列表中查找所述通道编号对应的地址,根据查找到的地址向所述目的通道进行读、写、删除操作。
6.优选的,所述模块编号和所述实体编号从预设数值开始编号。
7.优选的,所述将所述通道编号以通道注册请求的形式发送至所述通道管理器包括:将所述通道编号中所述实体编号为预设数值的通道配置为管理通道;通过所述管理通道向所述通道管理器发送所述通道注册请求;其中,所述通道注册请求包括除管理通道以外的所有所述通道编号。
8.优选的,还包括:当监测到退出请求时,触发向所述通道管理器发送通道注销请求,并在接收到所述通道管理器的应答时开始执行进程退出流程。
9.第二方面,本技术提供的一种基于共享内存的多进程间通信的方法采用如下的技术方案:一种基于共享内存的多进程间通信的方法,包括:对系统下所有进程的通信层面模块进行唯一编号,得到对应的模块编号,并在进程请求获取所述模块编号时发送给对应进程;接收进程发送的通道注册请求,根据所述通道注册请求为每个通道编号分配通道的数据存储空间,并利用所述通道注册请求中对应的通道编号标识所述数据存储空间的地址;将所述通道编号添加至二维数组中,更新通道列表的所述二维数组和所述数据存储空间的地址,并将所述通道列表广播给系统中在线的进程。
10.优选的,通过管理通道向在线的进程广播所有消息;所述管理通道为进程的通道编号中实体编号为预设数值的通道。
11.优选的,还包括:当接收进程发送的通道注销请求时,向发送所述通道注销请求的进程返回应答,并将与发送所述通道注销请求的所述进程相关的所有通道编号从所述通道列表中删除或在所述通道列表中标识为下线;将更新后的所述通道列表广播至系统中所有在线进程。
12.第三方面,本技术提供的一种基于共享内存的多进程间通信的方法采用如下的技术方案:一种基于共享内存的多进程间通信的方法,包括:通道管理器启动,对系统下所有进程的通信层面模块进行唯一编号,得到对应模块编号;进程启动,对启动的所述进程的通信层面模块下所有实体进行编号得到实体编号;启动的所述进程从所述通道管理器获取模块编号,利用所述模块编号和所述实体编号对每个实体对应的通道进行编号,得到通道的通道编号;其中,所述通道编号包括所述模块编号和所述实体编号;对每个实体对应的通道进行编号的所述进程将所述通道编号以通道注册请求的形式发送至所述通道管理器;所述通道管理器接收所述通道注册请求,根据所述通道注册请求为每个通道编号分配通道的数据存储空间,并利用所述通道注册请求中对应的通道编号标识所述数据存储空间的地址;所述通道管理器将所述通道编号添加至二维数组中,更新通道列表的所述二维数组和所述数据存储空间的地址,并将所述通道列表广播给系统中在线的进程;在线的所述进程接收所述通道列表;在线的所述进程利用目的通道的所述通道编号从所述通道列表中查找所述通道
编号标识的地址,根据查找到的地址向所述目的通道进行读、写、删除操作。
13.优选的,还包括:当在线的所述进程监测到退出请求时,触发向所述通道管理器发送通道注销请求;当所述通道管理器接收到所述通道注销请求时,向发送所述通道注销请求的所述进程返回应答,并将与发送所述通道注销请求的所述进程相关的所有通道编号从所述通道列表中删除或在所述通道列表中标识为下线;然后将更新后的所述通道列表向系统中所有在线进程广播;发送所述通道注销请求的所述进程在接收到所述通道管理器返回的应答后开始执行进程退出流程。
14.第四方面,本技术提供的一种基于共享内存的多进程间通信的装置采用如下的技术方案:一种基于共享内存的多进程间通信的装置,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如第一方面、第二方面或第三方面所述的一种基于共享内存的多进程间通信的方法。
15.综上所述,本技术通过在通道描述信息增加模块编号和实体编号的概念,定义每个进程的通信层面模块都分配对应的模块编号,对模块下实体进行编号,得到实体编号,并定义通过包括模块编号和实体编号的通道编号标识通道的存储空间地址,这样当一个进程向另一个进程的通道写入、读取或删除数据时,可以通过目的通道的通道编号直接在通道列表中找到由该通道编号标识的通道的地址,不再需要进行地址的逐一遍历,从而使每个通道数据的增加、删除、查询时间复杂度都是o(1),有效提高进程间通信效率,降低延迟。
16.附图说明
17.图1是本技术通道编号的二维数组存储结构示意图;图2是本技术实施例一提供的一种基于共享内存的多进程间通信的方法的流程图;图3是本技术实施例二提供的一种基于共享内存的多进程间通信的方法的流程图;图4是本技术实施例三提供的一种基于共享内存的多进程间通信的方法的流程图;图5是是本技术实施例一提供的一种基于共享内存的多进程间通信的装置的结构框图。
18.具体实施方式
19.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图1-5及实施例,对本技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本技术,并不用于限定本技术。
20.本技术选用c++作为共享内存通信层的开发语言,c++本身提供了标准模块库供我们使用,其中用于数据存储的最常见模块库有vector、list、deque、map和set。在使用这些模块库时,需要考虑插入数据、删除数据和查询数据的时间复杂度以及内存使用情况;为了选择适合做共享内存的通道数据存储结构,做如下介绍和分析。
21.(1)vector,存储结构是动态数组。
22.先在内存里开辟一段连续的空间;随着数据量的增加,空间不够用的时候会重要开辟新的空间;将旧数据拷贝到新空间,然后释放旧的空间。
23.预先申请大空间,不会造成内存碎片,利用率高,但重新搬移数据会降压效率;在时效性方面,支持随机访问,查询、插入、删除数据的时间复杂度都为o(1),但随机插入和随机删除数据的时间复杂度为o(n),另外搬移数据的时间复杂度为o(n)。适用于高效访问且一旦初始化空间后不变化的情况。
24.(2)list,存储结构是双向链表,使用的是非连续的栈内存空间存储。
25.每一个结点都包含一个信息块、一个指向前结点指针和一个指向后结点指针,增加和删除都需要申请和释放相应的内存,好处是用多少内存申请多少,不浪费内存,但缺点是造成大量内存碎片,利用率不高。
26.插入和删除时间复杂度为o(1),查询的时间复杂度为o(n)。适用于大量插入和删除操作,不关心随机查询数据。
27.(3)deque,存储结构不是指定的一块连续空间,但可以像vector一样访问数据,它更像是vector和list的综合,结合了两者的优点。美中不足的是遍历效率特别低,适用于不需要遍历的场景下。插入和删除的时间复杂度为o(n),访问则为o(1)。
28.(4)map,是采用红黑树实现的,由键值对组成,键不可以重复,键和值有一一对应的关系。可以通过键来索引到所需要的数据;增加数据、删除数据和查询数据的时间复杂度都是o(logn),适合数据量大、操作频繁的数据。
29.综合对上述几种存储结构的特点分析,从时效性出发,map是很适合共享内存通道数据的存储结构;所以在本技术中采用map存储结构对通道数据进行存储。
30.但是在对通道进行增加、查询或删除数据操作时,需要进行大量遍历才能找到通道的地址,数据增加、数据删除、数据查询时间复杂度相对较高为o(logn),致使通信效率较低,尤其是进程数量较多、数据量较大时,通信时延明显。
31.本技术通信层采用模块化的思想设计,在通道描述信息中,增加模块编号和实体编号的概念;定义给每个进程的通信层模块都分配对应的模块编号,如果其下有业务功能或应用功能,为每个业务功能或应用功能分配实体编号,模块编号和实体编号都从一个预设数值开始编号,如该预设数值为0;同时,定义通过模块编号和实体编号给每个进程的一个或多个通道进行编号,通道的编号由其所在模块的模块编号和对应实体的实体编号组成;通过上述定义,所有进程的所有通道的通道编号就构成了一个通道编号的二维数组,如图1所示,当某进程向一个进程(模块编号为1)的通道1写入、读取或删除数据时,可以直接访问二维数组中a
11
的元素,获取a
11
标识的通道的地址,然后根据地址对通道进行相关操作,不再需要进行地址的逐一遍历,从而使每个通道数据的增加、删除、查询时间复杂度都是o(1),非常高效。
32.实施例一
本技术实施例公开一种基于共享内存的多进程间通信的方法,应用于系统中各类进程的通信层面模块。参照图2,包括以下步骤:步骤s100、启动,根据通信层部署环境需要配置实体数量;并对通信层面模块下所有实体进行编号得到实体编号。
33.步骤s200、从通道管理器获取模块编号,根据自身模块编号和实体编号对每个实体对应的通道进行编号,得到进程通信层面模块的所有通道的通道编号;其中,通道编号包括但不限于通道所在进程通信层面模块的模块编号和对应实体的实体编号,通道编号可以为模块编号i+实体编号j+任意数字串a,也可以为a
ij
,不限定形式。
34.步骤s300、初始化实体编号为预设数值(如0)的通道编号,将通信层面模块的实体编号为预设数值的通道作配置为管理通道,专用于与通道管理器间通信,进行通道管理器与进程间的所有管理信息的管理,保证系统进程与通道管理器间通信的可靠性。
35.步骤s400、通过管理通道将所有通道编号向通道管理器进行通道注册,即将通道编号以通道注册请求的形式发送至通道管理器,进行与通道编号对应通道的注册;这里注册的是除管理通道外的其它通道,这些通道为用来进行数据传输的数据通道。
36.步骤s500、接收通道管理器向系统中所有在线进程广播的通道列表;其中,通道列表包括二维数组,二维数组每个元素为通道编号,每个通道编号标识一个通道的地址;通道管理器每次接收到通道注册请求,都会更新二维数组中的通道编号和对应的地址。
37.步骤s600、利用目的通道的通道编号从通道列表中查找该通道编号标识的地址,此时查找到的地址即为目的通道的地址,根据查找到的地址向通道进行读、写、删除等操作。
38.在本技术实施例中,当进程退出请求时,触发向通道管理器进行通道注销,为保证通道管理器接收到通道注销请求,在接收到通道管理器应答后进程才开始退出;同时通道管理器在接收到通道注销请求后会将该进程的所有相关通道编号从通道列表中删除或在通道列表中将该进程的所有通道编号标识为下线,并将更新后的通道列表同步给系统中所有在线进程。
39.实施例二本技术实施例公开一种基于共享内存的多进程间通信的方法,应用于系统中通道管理器。参照图3,包括以下步骤:步骤a100、启动(通道管理器),对系统下所有进程的通信层面模块进行唯一编号,得到对应模块编号,无论进程是否启动,模块编号都不会注销;并在进程请求获取模块编号时发送给对应进程。
40.步骤a200、接收进程发送的通道注册请求,根据通道注册请求为每个通道编号分配通道的数据存储空间,并利用通道注册请求中的对应通道编号标识数据存储空间的地址。
41.步骤a300、将通道编号添加至二维数组,更新通道列表的二维数组和数据存储空间的地址,并将通道列表广播给系统中在线的进程。
42.在本技术实施例中,当接收进程发送的通道注销请求时,通过管理通道向发送的通道注销请求进程返回应答,并将与发送的通道注销请求进程的相关的所有通道编号从通道列表中删除或在通道列表中标识为下线,然后将更新后的通道列表同步到系统中所有在
线进程。
43.实施例三本技术实施例公开一种基于共享内存的多进程间通信的方法,应用于包括通道管理器的多进程通信系统。如图4所示,包括以下步骤:步骤b100、通道管理器启动,对系统下所有进程的通信层面模块进行唯一编号,得到对应模块编号。
44.步骤b200、进程启动,根据通信层部署环境需要配置实体数量;并对通信层面模块下所有实体进行编号得到实体编号。
45.步骤b300、启动的进程从通道管理器获取模块编号,根据自身模块编号和实体编号对每个实体对应的通道进行编号,得到进程通信层面模块的所有通道的通道编号。
46.步骤b400、对每个实体对应的通道进行完编号的进程初始化实体编号为预设数值的通道编号,将实体编号为预设数值的通道作配置为管理通道。
47.步骤b500、配置完管理通道的进程通过管理通道将除管理通道外的所有通道编号以通道注册请求形式发送给向通道管理器进行通道的注册。
48.步骤b600、通道管理器接收进程发送的通道注册请求,根据注册请求的每个通道编号分配数据存储空间,并利用注册请求中的对应通道编号标识数据存储空间的地址。
49.步骤b700、通道管理器将通道编号添加二维数组,更新通道列表,并将通道列表广播给系统所有在线的进程。
50.步骤b800、在线的进程接收通道管理器向系统所有在线进程广播的通道列表;其中,通道列表包括系统所有进程的通道编号的二维数组,二维数组每个元素为通道编号,每个通道编号标识该通道的地址。
51.步骤b900、在线的进程根据目的通道的通道编号从通道列表中获取目的通道的地址,根据查找到的地址向通道进行读、写、删除等操作。
52.实施例四本技术实施例还提供了一种基于共享内存的多进程间通信的装置,部署于包括通道管理器的多进程间通信系统,包括:一个或多个处理器和存储器,如图5所示,以一个处理器200及存储器100为例。处理器200和存储器100可以通过总线或者其他方式连接,如以通过总线连接为例。
53.存储器100作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序,如本技术实施例中的一种基于共享内存的多进程间通信的方法。处理器200通过运行存储在存储器100中的非暂态软件程序以及指令,从而实现上述本技术实施例中的一种基于共享内存的多进程间通信的方法。
54.存储器100可以包括存储程序区和存储数据区,其中,存储程序区可存储操作装置、至少一个功能所需要的应用程序;存储数据区可存储执行上述实施例中的一种基于共享内存的多进程间通信的方法所需的数据等。此外,存储器100可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
55.实现上述实施例中的一种基于共享内存的多进程间通信的方法所需的非暂态软件程序以及指令存储在存储器中,当被一个或者多个处理器执行时,执行上述实施例中的一种基于共享内存的多进程间通信的方法,例如,执行以上描述的图2中的方法步骤s100至步骤s600、图3中的方法步骤a100至步骤a300以及图4中的方法步骤b100至步骤b900。
56.本技术提供的装置当某进程向一个进程写入、读取或删除数据时,可以直接访问通道列表的二维数组中元素,获取对应通道的地址,然后根据地址对通道进行相关操作,不需要进行地址的逐一遍历,从而使每个通道数据的增加、删除、查询时间复杂度都是o(1),有效提高通信效率。
57.以上均为本技术的较佳实施例,并非依此限制本技术的保护范围,本说明书(包括摘要和附图)中公开的任一特征,除非特别叙述,均可被其他等效或者具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1