进程间数据交互方法、系统、电子设备及存储介质与流程
未命名
08-29
阅读:136
评论:0

1.本发明涉及计算机技术领域,尤其涉及一种进程间数据交互方法、系统、电子设备及存储介质。
背景技术:
2.目前unix/linux下的进程间通信有很多种方法,如匿名管道(pipe):父子进程间的通信,命名管道(fifo):可以和无关联进程的通信,共享内存(shm):可以和无关联进程的通信,需要自己处理进程同步,比如和信号量配合。unix域套接字(unix socket):可以和无关联进程的通信,使用socket接口。网域套接字(internet socket):可以跨主机通信,使用socket接口。
3.但是,上述的通信方式均存在不同次数的数据拷贝、等待信号量、锁等机制,从而极大的降低进程间的通讯效率。
技术实现要素:
4.本发明提供一种进程间数据交互方法、系统、电子设备及存储介质,旨在提高进程通讯间的数据交互效率。
5.第一方面,本发明提供一种进程间数据交互方法,包括:
6.在发送端将数据信息写入目标共享内存块时,将所述目标共享内存块的参考指针发送至所述发送端的接收端;所述目标共享内存块为预先创建的共享内存区中的任一共享内存块;
7.在所述接收端通过所述参考指针读取数据信息时,基于所述参考指针在所述目标共享内存块中获取数据信息并返回至所述接收端。
8.在一个实施例,所述进程间数据交互方法还包括:
9.若确定接收端以轮询模式运行,且内存块在排队等待被接收端再次检测时,则启用无锁队列,并在安全溢出的过程中回收待处理内存块;所述待处理内存块为所述共享内存区中最先创建的共享内存块。
10.在一个实施例,在接收端读取目标共享内存块中数据信息的过程中,还包括:
11.获取所述目标共享内存块被参考指针引用的当前指针引用记录;
12.基于所述当前指针引用记录,确定出引用计数;
13.若确定所述引用计数为预设次数,则释放所述目标共享内存块。
14.在一个实施例,所述获取所述目标共享内存块被参考指针引用的当前指针引用记录,包括:
15.间隔预设时长获取,通过所述参考指针读取所述目标共享内存块中数据信息的新增接收端或者减少接收端;
16.基于所述目标共享内存块的原始指针引用记录,以及所述新增接收端或所述减少接收端,得到所述当前指针引用记录。
17.在接收端读取目标共享内存块中数据信息的过程中,一个目标共享内存块中的数据信息被多个接收端通过参考指针订阅。
18.第二方面,本发明提供一种进程间数据交互系统,包括:
19.发送模块,用于在发送端将数据信息写入目标共享内存块时,将所述目标共享内存块的参考指针发送至所述发送端的接收端;所述目标共享内存块为预先创建的共享内存区中的任一共享内存块;
20.数据交互模块,用于在所述接收端通过所述参考指针获取数据信息时,基于所述参考指针在所述目标共享内存块中获取数据信息并返回至所述接收端。
21.在一个实施例,所述进程间数据交互系统还用于:
22.若确定接收端以轮询模式运行,且内存块在排队等待被接收端再次检测时,则启用无锁队列,并在安全溢出的过程中回收待处理内存块;所述待处理内存块为所述共享内存区中最先创建的共享内存块。
23.在一个实施例,所述进程间数据交互系统还用于:
24.获取所述目标共享内存块被参考指针引用的当前指针引用记录;
25.基于所述当前指针引用记录,确定出引用计数;
26.若确定所述引用计数为预设次数,则释放所述目标共享内存块。
27.第三方面,本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面所述进程间数据交互方法。
28.第四方面,本发明还提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质包括计算机程序,所述计算机程序被所述处理器执行时实现第一方面所述进程间数据交互方法。
29.第五方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被所述处理器执行时实现第一方面所述进程间数据交互方法。
30.本发明提供的进程间数据交互方法、系统、电子设备及存储介质,在发送端将数据信息写入目标共享内存块时,将目标共享内存块的参考指针发送至发送端的接收端;目标共享内存块为预先创建的共享内存区中的任一共享内存块;在接收端通过参考指针读取数据信息时,基于参考指针在目标共享内存块中获取数据信息并返回至接收端。
31.在进程间数据交互的过程中,只需要来回目标共享内存块的传递参考指针,因此在进程间数据交互的过程中实际并不需要实际传输数据,也即无论数据信息的大小如何,数据在传输过程中所消耗的时间都是恒定的,同时,在进程间数据交互的过程不需要数据拷贝,从而实现了零拷贝技术进行共享内存的进程间数据交互,提升了进程通讯间的数据交互效率。
附图说明
32.为了更清楚地说明本发明的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
33.图1是本发明提供的进程间数据交互方法的流程示意图;
34.图2是本发明提供的进程间数据交互系统的结构示意图;
35.图3是本发明提供的电子设备的结构示意图。
具体实施方式
36.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
37.本发明实施例提供了进程间数据交互方法的实施例,需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些数据下,可以以不同于此处的顺序完成所示出或描述的步骤。
38.参照图1,图1是本发明提供的进程间数据交互方法的流程示意图。本发明实施例提供的进程间数据交互方法包括:
39.步骤101,在发送端将数据信息写入目标共享内存块时,将所述目标共享内存块的参考指针发送至所述发送端的接收端;
40.步骤102,在所述接收端通过所述参考指针读取数据信息时,基于所述参考指针在所述目标共享内存块中获取数据信息并返回至所述接收端。
41.本发明实施例以进程间数据交互系统作为执行主体为例。进程间数据交互系统中包括代理守护进程,代理守护进程利用共享内存技术,预先开辟共享内存区,共享内存区中包括多个目标共享内存块。
42.进一步地,发送端可以通过接口将要发送的数据信息直接写入到事先由代理守护进程预订好的内存块中。因此,在发送端将数据信息写入目标共享内存块时,代理守护进程确定该目标共享内存块的参考指针,目标共享内存块为共享内存区中的任一内存块。进一步地,代理守护进程将该目标共享内存块的参考指针,发送至发送端的接收端。
43.因此可以理解为,当发送端的数据传递完成后,接收端会接收到代理守护进程指向该目标共享内存块的参照指针(reference),通过参照指针reference可以在代理守护进程中获取数据信息,同时,接收端可以管理自己可配置容量的信息队列。也即,当共享内存区中被写入数据信息时,接收端就会收到一个参照指针reference。
44.需要说明的是,不同的接收端可以订阅同一个共享内存区中的书信息,但是多个接收端之前彼此不知道对方,也即在接收端读取目标共享内存块中数据信息的过程中,一个目标共享内存块中的数据信息可以被多个接收端通过参考指针reference订阅,从而提高了共享内存区中共享内存块的利用率。同时,每一个接收端可以拥有唯一的且属于自身的资源池,因此,接收端可以查看自身资源池中哪些数据仍在处理状态中,以及哪些数据可以被丢弃。
45.进一步地,在接收端通过参考指针reference读取目标共享内存块中的数据信息时,代理守护进程根据参考指针reference在目标共享内存块中获取数据信息,并将获取到的数据信息返回至接收端,从而通过传递参考指针reference即可实现进程间数据交互。
46.本发明实施例提供的进程间数据交互方法,在发送端将数据信息写入目标共享内
存块时,将目标共享内存块的参考指针发送至发送端的接收端;目标共享内存块为预先创建的共享内存区中的任一共享内存块;在接收端通过参考指针读取数据信息时,基于参考指针在目标共享内存块中获取数据信息并返回至接收端。
47.在进程间数据交互的过程中,本发明实施例减少了数据的多次拷贝,只需要一份数据,然后传递它的参考指针,因为为指针一般是4个字节,所以,传递一个指针给对方,通信时间就下来了,并且可以传递给多个进程,时间消耗并不会显著增加。同时,在进程间数据交互的过程中,只需要来回目标共享内存块的传递参考指针,因此在进程间数据交互的过程中实际并不需要实际传输数据,也即无论数据信息的大小如何,数据在传输过程中所消耗的时间都是恒定的,同时,在进程间数据交互的过程不需要数据拷贝,从而实现了零拷贝技术进行共享内存的进程间数据交互,提升了进程通讯间的数据交互效率。
48.进一步地,在接收端读取目标共享内存块中数据信息的过程,进程间数据交互方法还包括:
49.若确定接收端以轮询模式运行,且内存块在排队等待被接收端再次检测时,则启用无锁队列,并在安全溢出的过程中回收待处理内存块;所述待处理内存块为所述共享内存区中最先创建的共享内存块。
50.具体地,在进程间数据交互的过程中,如果确定接收端以轮询模式(polling)运行,并且内存块在排队等待被接收端再次检测时,代理守护进程则可以启用无锁队列(lock-free queue),在安全溢出(safely overflowing)的过程中回收待处理内存块,待处理内存块也可以理解为较旧的内存块。因此,如果确定接收端以轮询模式(polling)运行,并且内存块在排队等待被接收端再次检测时,代理守护进程则可以启用无锁队列(lock-free queue),在安全溢出(safely overflowing)的过程中回收共享内存区中最先创建的共享内存块。
51.本发明实施例无锁队列能够使接收端拥有更高效的使用内存,并最大限度的在队列里储存最新的消息数据,无论连续轮询之间的时间间隔有多长,这对高频的发送端和对最新的数据信息感兴趣的接收端是非常有用的,将无锁队列结合到共享内存块中,实现了无锁队列进行共享内存的进程间数据交互,提升了进程通讯间的数据交互效率。
52.进一步地,在接收端读取目标共享内存块中数据信息的过程中,进程间数据交互方法还包括:
53.获取所述目标共享内存块被参考指针引用的当前指针引用记录;
54.基于所述当前指针引用记录,确定出引用计数;
55.若确定所述引用计数为预设次数,则释放所述目标共享内存块。
56.具体地,代理守护进程可以获取到每一个目标共享内存块对应的接收端的引用记录,因此,在接收端读取目标共享内存块中数据信息的过程中,代理守护进程实时获取每一个目标共享内存块被参考指针reference引用的当前指针引用记录。
57.在一实施例中,目标共享内存块a被接收端b、接收端c、接收端d和接收端e的参考指针reference引用,那么,目标共享内存块a的当前指针引用记录为{b、c、d和e}。
58.进一步地,代理守护进程根据当前指针引用记录,确定出目标共享内存块的引用计数,并确定引用计数是否为预设次数。
59.在一实施例中,目标共享内存块a的当前指针引用记录为{b、c、d和e},那么目标共
享内存块a的的引用计数为4次。
60.进一步地,若确定引用计数为预设次数,代理守护进程则释放目标共享内存块,一般地,预设次数为0,也即,若确定引用计数为0次,代理守护进程则释放目标共享内存块,即目标共享内存块被回收,从而避免造成资源浪费。
61.进一步地,获取所述目标共享内存块被参考指针引用的当前指针引用记录,包括:
62.间隔预设时长获取,通过所述参考指针读取所述目标共享内存块中数据信息的新增接收端或者减少接收端;
63.基于所述目标共享内存块的原始指针引用记录,以及所述新增接收端或所述减少接收端,得到所述当前指针引用记录。
64.具体地,代理守护进程间隔预设时长获取,通过参考指针reference读取目标共享内存块中数据信息的新增接收端或者减少接收端,其中,预设时长一般为毫秒甚至微秒级别,因此,本发明实施例可以理解为,代理守护进程实时获取新增接收端或者减少接收端。同时,代理守护进程获取目标共享内存块的原始指针引用记录。
65.进一步地,代理守护进程根据目标共享内存块的原始指针引用记录,以及新增接收端或减少接收端,得到当前指针引用记录。
66.在一实施例中,原始指针引用记录为{b、c、d和e},实时获取到的新增接收端为接收端f和接收端g,那么,当前指针引用记录为{b、c、d、e、f和g},此时的引用计数为6次。进一步地,实时获取到的减少接收端为接收端c、接收端d和接收端e,那么,当前指针引用记录为{b},此时的引用计数为1次。
67.因此可以理解为,代理守护进程可以获知每个目标共享内存块对应的接收端的引用记录,每增加一个接收端读取目标共享内存块中的数据信息,目标共享内存块的参考指针reference的引用计数reference counting就会增加1,如果某个接收端不读取目标共享内存块中的数据信息了,目标共享内存块的参考指针reference的引用计数reference counting就会减少1。因此,代理守护进程对目标共享内存块进行引用计数reference counting监控,若目标共享内存块进行引用计数reference counting为零时,说明没有接收端读取目标共享内存块中的数据信息了,此时,代理守护进程就会释放目标共享内存块,即目标共享内存块被重置回收,避免造成资源浪费。
68.在进程间数据交互的过程中,本发明实施例减少了数据的多次拷贝,只需要一份数据,然后传递它的参考指针,因为为指针一般是4个字节,所以,传递一个指针给对方,通信时间就下来了,并且可以传递给多个进程,时间消耗并不会显著增加。同时,在进程间数据交互的过程中,本发明实施例只需要来回目标共享内存块的传递参考指针,因此在进程间数据交互的过程中实际并不需要实际传输数据,也即无论数据信息的大小如何,数据在传输过程中所消耗的时间都是恒定的,同时,在进程间数据交互的过程不需要数据拷贝,从而实现了零拷贝技术进行共享内存的进程间数据交互,提升了进程通讯间的数据交互效率。
69.进一步地,本发明提供的进程间数据交互系统与本发明提供的进程间数据交互方法互对应参照。
70.图2所示,图2是本发明提供的进程间数据交互系统的结构示意图,进程间数据交互系统包括:
71.发送模块201,用于在发送端将数据信息写入目标共享内存块时,将所述目标共享内存块的参考指针发送至所述发送端的接收端;所述目标共享内存块为预先创建的共享内存区中的任一共享内存块;
72.数据交互模块202,用于在所述接收端通过所述参考指针获取数据信息时,基于所述参考指针在所述目标共享内存块中获取数据信息并返回至所述接收端。
73.进一步地,进程间数据交互系统还用于:
74.若确定接收端以轮询模式运行,且内存块在排队等待被接收端再次检测时,则启用无锁队列,并在安全溢出的过程中回收待处理内存块;所述待处理内存块为所述共享内存区中最先创建的共享内存块。
75.进一步地,进程间数据交互系统还用于:
76.获取所述目标共享内存块被参考指针引用的当前指针引用记录;
77.基于所述当前指针引用记录,确定出引用计数;
78.若确定所述引用计数为预设次数,则释放所述目标共享内存块。
79.进一步地,进程间数据交互系统还用于:
80.间隔预设时长获取,通过所述参考指针读取所述目标共享内存块中数据信息的新增接收端或者减少接收端;
81.基于所述目标共享内存块的原始指针引用记录,以及所述新增接收端或所述减少接收端,得到所述当前指针引用记录。
82.本发明提供的进程间数据交互系统的具体实施例与上述进程间数据交互方法各实施例基本相同,在此不作赘述。
83.图3示例了一种电子设备的实体结构示意图,如图3所示,电子设备可以包括:处理器(processor)310、通信接口(communications interface)320、存储器(memory)330和通信总线340,其中,处理器310,通信接口320,存储器330通过通信总线340完成相互间的通信。处理器310可以调用存储器330中的逻辑指令,以执行进程间数据交互方法,该方法包括:
84.在发送端将数据信息写入目标共享内存块时,将所述目标共享内存块的参考指针发送至所述发送端的接收端;所述目标共享内存块为预先创建的共享内存区中的任一共享内存块;
85.在所述接收端通过所述参考指针读取数据信息时,基于所述参考指针在所述目标共享内存块中获取数据信息并返回至所述接收端。
86.此外,上述的存储器330中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
87.另一方面,本发明还提供一种计算机程序产品,计算机程序产品包括存储在非暂
态计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的进程间数据交互方法,该方法包括:
88.在发送端将数据信息写入目标共享内存块时,将所述目标共享内存块的参考指针发送至所述发送端的接收端;所述目标共享内存块为预先创建的共享内存区中的任一共享内存块;
89.在所述接收端通过所述参考指针读取数据信息时,基于所述参考指针在所述目标共享内存块中获取数据信息并返回至所述接收端。
90.又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的进程间数据交互方法,该方法包括:
91.在发送端将数据信息写入目标共享内存块时,将所述目标共享内存块的参考指针发送至所述发送端的接收端;所述目标共享内存块为预先创建的共享内存区中的任一共享内存块;
92.在所述接收端通过所述参考指针读取数据信息时,基于所述参考指针在所述目标共享内存块中获取数据信息并返回至所述接收端。
93.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
94.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
95.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
技术特征:
1.一种进程间数据交互方法,其特征在于,包括:在发送端将数据信息写入目标共享内存块时,将所述目标共享内存块的参考指针发送至所述发送端的接收端;所述目标共享内存块为预先创建的共享内存区中的任一共享内存块;在所述接收端通过所述参考指针读取数据信息时,基于所述参考指针在所述目标共享内存块中获取数据信息并返回至所述接收端。2.根据权利要求1所述的进程间数据交互方法,其特征在于,所述进程间数据交互方法还包括:若确定接收端以轮询模式运行,且内存块在排队等待被接收端再次检测时,则启用无锁队列,并在安全溢出的过程中回收待处理内存块;所述待处理内存块为所述共享内存区中最先创建的共享内存块。3.根据权利要求1所述的进程间数据交互方法,其特征在于,在接收端读取目标共享内存块中数据信息的过程中,还包括:获取所述目标共享内存块被参考指针引用的当前指针引用记录;基于所述当前指针引用记录,确定出引用计数;若确定所述引用计数为预设次数,则释放所述目标共享内存块。4.根据权利要求3所述的进程间数据交互方法,其特征在于,所述获取所述目标共享内存块被参考指针引用的当前指针引用记录,包括:间隔预设时长获取,通过所述参考指针读取所述目标共享内存块中数据信息的新增接收端或者减少接收端;基于所述目标共享内存块的原始指针引用记录,以及所述新增接收端或所述减少接收端,得到所述当前指针引用记录。5.根据权利要求1至4任一项所述的进程间数据交互方法,其特征在于,在接收端读取目标共享内存块中数据信息的过程中,一个目标共享内存块中的数据信息被多个接收端通过参考指针订阅。6.一种进程间数据交互系统,其特征在于,包括:发送模块,用于在发送端将数据信息写入目标共享内存块时,将所述目标共享内存块的参考指针发送至所述发送端的接收端;所述目标共享内存块为预先创建的共享内存区中的任一共享内存块;数据交互模块,用于在所述接收端通过所述参考指针获取数据信息时,基于所述参考指针在所述目标共享内存块中获取数据信息并返回至所述接收端。7.根据权利要求6所述的进程间数据交互系统,其特征在于,所述进程间数据交互系统还用于:若确定接收端以轮询模式运行,且内存块在排队等待被接收端再次检测时,则启用无锁队列,并在安全溢出的过程中回收待处理内存块;所述待处理内存块为所述共享内存区中最先创建的共享内存块。8.根据权利要求6所述的进程间数据交互系统,其特征在于,所述进程间数据交互系统还用于:获取所述目标共享内存块被参考指针引用的当前指针引用记录;
基于所述当前指针引用记录,确定出引用计数;若确定所述引用计数为预设次数,则释放所述目标共享内存块。9.一种电子设备,所述电子设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5任一项所述的进程间数据交互方法。10.一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5任一项所述的进程间数据交互方法。
技术总结
本发明涉及计算机技术领域,提供一种进程间数据交互方法、系统、电子设备及存储介质,该方法包括:在发送端将数据信息写入目标共享内存块时,将目标共享内存块的参考指针发送至发送端的接收端;在接收端通过参考指针读取数据信息时,基于参考指针在目标共享内存块中获取数据信息并返回至接收端。本发明实施例提供的进程间数据交互方法只需要来回目标共享内存块的传递参考指针,因此在进程间数据交互的过程中实际并不需要实际传输数据,也即无论数据信息的大小如何,数据在传输过程中所消耗的时间都是恒定的,同时,在进程间数据交互的过程不需要数据拷贝,从而实现了零拷贝技术进行共享内存的进程间数据交互,提升了进程通讯间的数据交互效率。数据交互效率。数据交互效率。
技术研发人员:刘刚
受保护的技术使用者:浪潮通信技术有限公司
技术研发日:2023.04.24
技术公布日:2023/8/28
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/