一种基于共享内存的进程通信方法技术

技术编号:38988188 阅读:11 留言:0更新日期:2023-10-07 10:18
本发明专利技术涉及一种基于共享内存的进程通信方法,共享内存设置在通信模块中,所述进程通过共享内存进行通信,通信模块还包括接口层,进程通信方法包括如下步骤:配置注册表步骤,配置进程之间通信步骤,配置共享内存的读写步骤。使用者只需要关注自己的数据类型,只需要注册类型即可实现通信。从使用者角度看,接受另一个进程数据,等同于接受Qt本身信号,只需要连接信号即可实现通信,减少了数据间耦合,提高了数据存储安全性。提高了数据存储安全性。提高了数据存储安全性。

【技术实现步骤摘要】
一种基于共享内存的进程通信方法


[0001]本专利技术属于进程间通信
,具体涉及一种基于共享内存的进程通信方法。

技术介绍

[0002]进程间通信(IPC,Interprocess communication):是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。IPC接口就提供了这种可能性。每个IPC方法均有它自己的优点和局限性,一般,对于单个程序而言使用所有的IPC方法是不常见的。IPC方法包括管道(PIPE)、消息排队、旗语、共用内存以及套接字(Socket)。其中,现有共享内存的通信方式包括以下不足:1.需要使用者自我开辟共享内存管理,并进行读和写的操作的代码实现,读写操作复杂。2.代码之间不能解耦合,增改通信对象操作复杂,数据安全性差。3.当需要一个进程内部多个线程或者对象需要新数据时,不能直接采用分发的方式传播。

技术实现思路

[0003]为解决上述问题,本专利技术一方面涉及了一种基于共享内存的进程通信方法,共享内存设置在通信模块中,进程通过共享内存进行通信,通信模块还包括接口层,进程通信方法包括如下步骤:配置注册表步骤,配置进程之间通信步骤,配置共享内存的读写步骤,其中,
[0004]配置注册表步骤包括:
[0005]以接口层接收若干进程的数据类型注册信息;
[0006]将所述数据类型注册信息写入注册表中;
[0007]配置进程之间通信步骤包括:
[0008]以所述接口层接收任一进程发来的封装有所述类型数据的协议信息并解析出类型注册信息;
[0009]接口层接收所述其它任一进程的读请求并解析出类型注册信息,将所述封装有所述类型数据的协议信息发送至发送所述读请求的所述任一进程;
[0010]配置共享内存的读写步骤包括:
[0011]共享内存根据接口层发来的写请求,将所述共享内存发来的所述类型数据写入循环队列;
[0012]共享内存根据接口层发来的读请求,将所述类型数据发送至所述接口层。
[0013]本专利技术第二方面涉及一种基于共享内存的进程通信模块,所述模块包括至少一个处理器;以及存储器,其存储有指令,通过至少一个处理器来执行指令。
[0014]本专利技术的有益效果在于,本专利技术的一种基于共享内存的进程通信方法,1.使用者只需要关注自己的数据类型,只需要注册类型即可实现通信。2.从使用者角度看,接受另一
个进程数据,等同于接受Qt本身信号,只需要连接信号即可实现通信,减少了数据间耦合,提高了数据存储安全性。
附图说明
[0015]图1:注册信息数据结构示意图;
[0016]图2:注册表数据结构示意图;
[0017]图3:新共享内存数据结构示意图;
[0018]图4:进程通信示意图;
[0019]图5:循环队列数据结构示意图;
[0020]图6:原有共享内存数据结构示意图;
[0021]图7:基于共享内存的进程通信方法步骤示意图。
具体实施方式
[0022]以下实施例进一步说明本专利技术的内容,但不应理解为对本专利技术的限制。在不背离本专利技术精神和实质的情况下,对本专利技术方法、步骤或条件所作的修改或替换,均属于本专利技术的范围。
[0023]术语解释
[0024]进程(Process):是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。
[0025]Qt:是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。
[0026]信号槽机制:与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁。
[0027]信号:当对象改变其状态时,信号就由该对象发射(emit)出去,而且对象只负责发送信号,它不知道另一端是谁在接收这个信号。这样就做到了真正的信息封装,能确保对象被当作一个真正的软件组件来使用。
[0028]槽:用于接收信号,而且槽只是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且对象并不了解具体的通信机制。
[0029]共享内存(shared memory):指在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。
[0030]多线程(multithreading):是指从软件或者硬件上实现多个线程并发执行的技术。
[0031]内存锁定:是实时应用程序的最重要问题之一。在实时环境中,进程必须能够保证连续的内存驻留,以减少延迟并阻止分页和交换。
[0032]现有基于共享内存的多进程通信模块通常被吞吐量大的后台系统采用,共享内存的数据结构采用循环队列的形式进行内存管理,采用“独写共读”的方式进行数据交互,即一个进程写,多个进程读。单种类型数据以块为单位,块内部实现为循环队列方式,只要保证循环队列的单元数量足够,就不会覆盖有效数据,该技术方案可以读写同时进行,并且不用使用内存锁,减少了进程间交换信息时经由内核的拷贝次数,提高了后台系统的吞吐量,
降低了后台系统的开销,有效地提高了系统的性能。
[0033]内部数据块采用循环队列结构,扩充了写的缓冲区,使得读写可以按照顺序进行收发,循环队列采用类型数组加写索引的数据结构实现。写过程为:读取写索引大小,查找写地址,写入数据,写索引加一,如果索引超过数组单元数量大小,进行零复位,完成写操作。读过程为:先存下旧的写索引作为自我变量,对新的写索引进行判断,是否改变,改变后进行地址查找,读数据,进行自我变量赋值,完成读操作。此方式用在单进程写多进程读的应用场景中。内部未采用注册,由使用者保证合理的读写操作。
[0034]现有共享内存具体实现如下:
[0035]某类型的循环队列数据结构如图5,主要由类型缓冲区和类型索引组成,类型缓冲区包含n个类型数据,类型索引对应写入的数据地址索引,根据循环队列特性,类型索引为0到n

1循环变化,读和写均是通过类型索引进行操作。
[0036]共享内存数据结构如图6所示,包含多个类型循环队列,需要使用者分别实现各个类型读写操作,同时保证单进程写,多进程读,即可实现进程间通信。现有共享内存的通信方式包括以下不足:
[0037]1.现有共享内存实现方式,需要使用者自我开辟共享内存管理,并进行读和写的操作的代码实现,读写操作复杂。
[0038]2.代码之间不能解耦合,增改通信对象操作复杂,数据安全性差。
[0039]3.当需要一个进程内部多个线程或者对象需要新数据时,不能直接采用分发的方式传播。
[0040]以下结合附图对本专利技术提供的具体实施方式进行详细说明。
[0041]针对现有技术中的技术问本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于共享内存的进程通信方法,所述共享内存设置在通信模块中,所述进程通过共享内存进行通信,其特征在于,所述通信模块还包括接口层,所述进程通信方法包括如下步骤:配置注册表步骤,配置进程之间通信步骤,配置共享内存的读写步骤,其中,所述配置注册表步骤包括:以接口层接收若干进程的数据类型注册信息;将所述数据类型注册信息写入注册表中;所述配置进程之间通信步骤包括:以所述接口层接收任一进程发来的封装有所述类型数据的协议信息并解析出类型注册信息;所述接口层接收所述其它任一进程的读请求并解析出类型注册信息,将所述封装有所述类型数据的协议信息发送至发送所述读请求的所述任一进程;所述配置共享内存的读写步骤包括:所述共享内存根据接口层发来的写请求,将所述共享内存发来的所述类型数据写入循环队列;所述共享内存根据接口层发来的读请求,将所述类型数据发送至所述接口层。2.根据权利要求1所述的一种基于共享内存的进程通信方法,其特征在于,所述协议信息为Qt信号。3.根据权利要求1所述的一种基于共享内存的进程通信方法,其特征在于,所述协议信息中封装的所述类型数据更新后,所有接收此协议信息的进程均可以收到更新的所述类型数据。4.根据权利要求1所述的一种基于...

【专利技术属性】
技术研发人员:靳金朋唐聪熊培
申请(专利权)人:北京冶自欧博科技发展有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1