CN113590362A - 进程间消息处理方法、装置、电子设备及存储介质 - Google Patents
进程间消息处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113590362A CN113590362A CN202110914149.0A CN202110914149A CN113590362A CN 113590362 A CN113590362 A CN 113590362A CN 202110914149 A CN202110914149 A CN 202110914149A CN 113590362 A CN113590362 A CN 113590362A
- Authority
- CN
- China
- Prior art keywords
- message
- target
- production process
- storage space
- business
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请提供一种进程间消息处理方法、装置、电子设备及存储介质,该方法包括:消息生产进程根据所产生的目标消息的类型以及各业务进程所注册的消息类型,确定接收该目标消息的目标业务进程;消息生产进程将该目标消息保存至第一存储空间;消息生产进程生成并向目标业务进程发送目标通知消息,该目标通知消息用于指示第一存储空间的地址;目标业务进程根据目标通知消息,从第一存储空间中读取目标消息。在上述步骤中,由于消息生产进程将目标消息所在共享内存中的地址,通过通知消息告知各目标业务进程,而不需要将目标消息为各目标业务进程都拷贝一份,因此,节约了消息传递通道和业务进程处理资源,并且,还提升了数据的交换效率。
Description
技术领域
本申请涉及计算机通信技术领域,具体而言,涉及一种进程间消息处理方法、装置、电子设备及存储介质。
背景技术
进程(Process),狭义来讲,是指系统中正在运行的一个应用程序,是计算机系统分配资源的最小单位。而系统中一般都会同时运行很多个不同的进程,为了能使不同的进程互相访问资源并进行协调工作,就有了进程间通信(Inter-Process Communication,简称IPC),所谓进程间通信,就是指系统中,不同进程之间传播或者交换信息的过程。目前,进程间主要是以管道、消息队列、共享内存、信号量、信号、套接字等方式进行通信,进程间大批量数据的交换主要使用共享内存的方式。其中,共享内存的进程间通信方式是指,映射一段能被多个进程所访问的共享内存,这段共享内存由一个进程创建,但多个进程都可以访问,共享内存是最快的进程间通信方式。
对于消息在多进程之间传递的情况,传统方式都是将待发送的消息由消息生产进程通过共享内存的方式,并根据系统中需要接收消息的业务进程的数量,拷贝成多份后写入共享内存,业务进程从共享内存中读出需要接收的消息,待使用完该消息后,业务进程将其使用过的消息从共享内存中释放。
但是,这种传统的将消息在多进程之间传递的方式,由于消息生产进程需要向每个业务进程发送广播消息,而部分消息对于其中一些业务进程为无效消息,无效消息会占用消息传递通道和业务进程处理资源。
发明内容
有鉴于此,本申请的目的在于,针对上述现有技术中的不足,提供一种进程间消息多播处理方法装置、电子设备及存储介质,以便解决现有技术中,存在的无效消息会占用消息传递通道和业务进程处理资源的问题。
为实现上述目的,本申请实施例采用的技术方案如下:
第一方面,本申请实施例提供了一种进程间消息处理方法,应用于电子设备,所述电子设备中运行有消息生产进程以及多个业务进程,所述方法包括:
所述消息生产进程根据所产生的目标消息的类型以及各业务进程所注册的消息类型,确定接收所述目标消息的目标业务进程,所述目标业务进程为所述多个业务进程中的至少一个业务进程;
所述消息生产进程将所述目标消息保存至所述电子设备的第一存储空间;
所述消息生产进程生成并向所述目标业务进程发送目标通知消息,所述目标通知消息用于指示所述第一存储空间的地址;
所述目标业务进程根据所述目标通知消息,从所述第一存储空间中读取所述目标消息。
作为一种可能的实现方式,所述消息生产进程生成并向所述目标业务进程发送目标通知消息,包括:
所述消息生产进程生成所述目标通知消息,并将所述目标通知消息发送至与所述目标业务进程对应的第二存储空间。
作为一种可能的实现方式,所述将所述目标通知消息发送至与所述目标业务进程对应的第二存储空间,包括:
将所述目标通知消息添加至所述第二存储空间的通知消息队列的末尾,所述通知消息队列中包括至少一个通知消息,各所述通知消息按照接收时间排序。
作为一种可能的实现方式,所述消息生产进程根据所产生的目标消息的类型以及各业务进程所注册的消息类型,确定接收所述目标消息的目标业务进程之前,还包括:
所述消息生产进程接收所述目标业务进程的注册请求,所述注册请求用于指示所述目标业务进程待注册的消息类型;
所述消息生产进程对所述目标业务进程待注册的消息类型进行注册,并记录所述目标业务进程所注册的消息类型;
所述消息生产进程向所述目标业务进程发送注册响应,所述注册响应用于指示是否注册成功。
作为一种可能的实现方式,所述消息生产进程根据所产生的目标消息的类型以及各业务进程所注册的消息类型,确定接收所述目标消息的目标业务进程之后,还包括:
若确定不存在接收所述目标消息的目标业务进程,则丢弃所述目标消息。
作为一种可能的实现方式,所述消息生产进程生成并向所述目标业务进程发送目标通知消息之后,还包括:
所述消息生产进程将所述目标消息的引用计数加一;
所述目标业务进程根据所述目标通知消息,从所述第一存储空间中读取所述目标消息之后,还包括:
所述目标业务进程将所述目标消息的引用计数减一;
所述方法还包括:
所述消息生产进程判断所述目标消息的引用计数是否为零,若是,则从所述第一存储空间中删除所述目标消息。
作为一种可能的实现方式,所述方还包括:
所述消息生产进程判断所述目标消息在所述第一存储空间中的保存时长是否大于预设时长,若是,从所述第一存储空间中删除所述目标消息。
作为一种可能的实现方式,所述方法还包括:
所述目标业务进程每隔预先设置的第一时长,更新活跃度值,所述活跃度值存储于所述第一存储空间或者第二存储空间中;
所述消息生产进程每隔预先设置的第二时长,读取所述活跃度值,若所述活跃度值在预先设置的第三时长内没有更新,将所述目标消息的引用计数减一;
所述预先设置的第二时长不小于所述预先设置的第一时长,所述预先设置的第三时长大于所述预先设置的第二时长。
第二方面,本申请实施例还提供了一种进程间消息处理装置,应用于电子设备,所述电子设备中运行有消息生产进程以及多个业务进程,所述装置包括:
消息生产进程模块,用于运行所述消息生产进程,根据所产生的目标消息的类型以及各业务进程所注册的消息类型,确定接收所述目标消息的目标业务进程,所述目标业务进程为所述多个业务进程中的至少一个业务进程;将所述目标消息保存至所述电子设备的第一存储空间;生成并向所述目标业务进程发送目标通知消息,所述目标通知消息用于指示所述第一存储空间的地址;
目标业务进程模块,用于运行所述目标业务进程,根据所述目标通知消息,从所述第一存储空间中读取所述目标消息。
第三方面,本申请实施例还提供了一种电子设备,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的程序指令,当电子设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述程序指令,以执行时执行如上述第一方面所述的进程间消息处理方法的步骤。
第四方面,本申请实施例还提供了一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如上述第一方面所述的进程间消息处理方法的步骤。
本申请的有益效果是:
本申请实施例提供的进程间消息处理方法、装置、电子设备及存储介质,消息生产进程根据所产生的目标消息的类型以及各业务进程所注册的消息类型,确定接收该目标消息的目标业务进程,该目标业务进程为多个业务进程中的至少一个业务进程;消息生产进程将该目标消息保存至电子设备的第一存储空间;消息生产进程生成并向目标业务进程发送目标通知消息,该目标通知消息用于指示所述第一存储空间的地址;目标业务进程根据该目标通知消息,从第一存储空间中读取目标消息。在上述步骤中,由于消息生产进程通过通知消息的方式,只需要将目标消息在共享内存中的存储地址,通过目标通知消息告知给各目标业务进程,而不需要将目标消息本身在共享内存中为每个目标业务进程都拷贝一份,即同一份数据只需要写入一次,因此,避免了多份的消息拷贝,也减少了冗余消息的接收,节约了消息传递通道和业务进程处理资源,提高消息处理效率,并且,当进程间需要进行大批量数据交换的时候,可以提升数据的交换效率。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为现有技术中采用共享内存的方式进行进程间通信的示意图;
图2为现有技术中消息在多进程之间传递的示意图;
图3为本申请实施例提供的一种进程间消息处理方法所对应的消息在消息生产进程和业务进程之间传递的示意图;
图4为本申请实施例提供的一种进程间消息处理方法的流程示意图;
图5为本申请实施例提供的另一种进程间消息处理方法的流程示意图;
图6为本申请实施例提供的另一种进程间消息处理方法的流程示意图;
图7为本申请实施例提供的一种进程间消息处理装置的结构示意图;
图8为本申请实施例提供的电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请实施例中将会用到术语“包括”,用于指出其后所声明的特征的存在,但并不排除增加其它的特征。
现有技术中,采用共享内存的方式进行进程间通信,具有效率高的特点。共享内存,允许两个或多个进程共享一个给定的存储区,这一段存储区可以被两个或两个以上的进程映射至自身的地址空间中,一个进程写入共享内存的消息,可以被其他使用这个共享内存的进程,通过一个简单的内存读取读出,从而实现了进程间的通信。
请参见图1,是现有技术中采用共享内存的方式进行进程间通信的示意图,如图1所示,假设,进程1和进程2之间需要进行通信,则可以将它们之间的共有数据放入共享内存中,以实现进程1和进程2之间的数据交换。
对于消息在多进程之间多播传递的情况,现有的消息生产进程发送消息到业务进程的方法是:消息生产进程通过共享内存的方式,将待发送消息拷贝发送到每个消息队列中,业务进程从消息队列中收取消息,进行业务流程的处理,每个业务进程守护一个消息队列。
请参见图2,是现有技术中消息在多进程之间传递的示意图,如图2所示,消息生产进程将待发送的消息,根据系统中需要接收消息的业务进程的数量,拷贝成多份后,发送到共享内存中的每个业务进程对应的消息队列中,各业务进程从各自对应的消息队列中收取消息,进行业务流程的处理,每个业务进程守护自己的消息队列。
示例性的,假设系统中存在3个业务进程,业务进程1、业务进程2以及业务进程3,其中,业务进程1、业务进程2以及业务进程3分别对应一个消息队列,即消息队列1、消息队列2以及消息队列3。某时刻,消息生产进程产生了一条待发送的消息,则消息生产进程需要将待发送的消息,拷贝成3份,分别发送到共享内存中的每个业务进程对应的消息队列中,即需要将待发送消息分别发送到消息队列1、消息队列2以及消息队列3中。
但是,现有的这种消息在多进程间传递的方式,存在着如下的问题:
(1)消息生产进程对于每条待发送消息,均需要向共享内存中,每个业务进程对应的消息队列进行发送,而部分消息对于一些业务进程为有效消息,而对于另外一些业务进程来说,则为无效消息,那么,这些无效消息会占用消息传递通道以及业务进程处理资源。
(2)由于消息生产进程,需要根据接收消息的各业务进程的数量,将待发送消息拷贝多份后,发送到各个业务进程对应的消息队列中,因此,降低了消息的传递速度。
本申请基于上述的问题,提出一种进程间消息处理方法,通过采用主动注册的方式,即,各业务进程主动向消息生产进程注册需要关注的消息类型,并将共享内存中,原有的各业务进程对应的消息队列用作各业务进程对应的通知消息队列,其中,通知消息队列用于存放消息生产进程向业务进程发送的通知消息。当消息生产进程在产生了一条待发送消息后,只需要将该待发送消息发送一份到共享内存中,并发送通知消息给关注该条待发送消息的各业务进程,各业务进程通过通知消息中的待发送消息在共享内存中的存储地址访问该消息。
由于消息生产进程只需要将待发送的消息发送一份到共享内存中,而不必给每个业务进程都拷贝一份,避免了多份待发送消息的拷贝以及拷贝后的多份待发送消息在共享内存中,会占用大量存储空间的问题,同时,也减少了冗余消息的接收,提高了消息处理效率,进一步的,由于通知消息中,仅仅保存了待发送消息在共享内存中的地址,因此,占用的存储空间远远小于待发送消息本身所占用的存储空间,节约了消息传递通道和业务进程处理资源。
接下来的实施例,将详细阐述消息生产进程所产生的待发送消息是如何在消息生产进程和业务进程之间传递的。
在消息生产进程和业务进程启动之后,首先,各业务进程需要与消息生产进程建立连接,在建立连接之后,各业务进程向消息生产进程主动发起注册请求,以将业务进程所需要关注的消息类型发送给消息生产进程,不同的业务进程可以关注相同类型的消息,也可以关注不同类型的消息,每个业务进程可以关注所有类型的消息,也可以关注部分类型的消息。各业务进程在向消息生产进程注册完成后,消息生产进程和业务进程之间开始通信过程。
请参见图3,是本申请实施例提供的一种进程间消息处理方法的流程示意图,该方法应用于电子设备,该电子设备中运行有消息生产进程以及多个业务进程,如图3所示,该方法包括:
步骤S301,消息生产进程根据所产生的目标消息的类型以及各业务进程所注册的消息类型,确定接收该目标消息的目标业务进程。
具体的,消息生产进程每产生一条新的待发送消息,可以将该待发送消息称为目标消息,其中,每个目标消息都有相应的类型,消息生产进程根据所产生的目标消息的类型,以及各目标业务进程在消息生产进程中注册的其所关注的消息的类型,确定该目标消息应该由哪个或者哪些业务进程接收,可以将接收该目标消息的业务进程称为目标业务进程,其中,目标业务进程为多个业务进程中的至少一个业务进程。
例如,消息生产进程产生了一条目标消息a,消息a的类型假设为s1,如果业务进程1、业务进程2向消息生产进程注册的消息类型也为s1,那么,消息生产进程可以得知,目标消息a由业务进程1和业务进程2接收,那么,将业务进程1和业务进程2称为目标业务进程。
由于消息生产进程会产生多条目标消息,这些多条目标消息组成一个目标消息队列,消息生产进程每新产生一条目标消息,将该目标消息添加至目标消息队列的末尾,且各个目标消息按照接收时间进行排序。可以理解的是,目标消息队列在共享内存中的存储地址,为最先产生的目标消息在共享内存中的存储地址。
步骤S302,消息生产进程将目标消息保存至电子设备的第一存储空间。
具体的,消息生产进程在确定了目标消息具体由哪个或者哪些业务进程接收之后,消息生产进程将目标消息保存至电子设备的第一存储空间中,即,将目标消息发送至位于第一存储空间的目标消息队列中,而且,仅需要发送一份该目标消息至目标消息队列中。其中,第一存储空间为电子设备中,可以由多个进程共享的物理内存的一部分存储空间,即,第一存储空间位于电子设备的共享内存中。
请参见图4,是采用本申请实施例提供的一种进程间消息处理方法所对应的待发送消息在消息生产进程和业务进程之间传递的示意图,如图4所示,消息生产进程发送目标消息,并将目标消息保存至共享内存中的第一存储空间的目标消息队列中。
可以理解的是,在图4中,业务进程的数量以及通知消息队列的数量仅仅是示意性的,该方法具体实施例时,可以有任意数量的业务进程以及与之数量相等的通知消息队列,本申请在此不做限制。
继续步骤S301中的举例,消息生产进程在确定了目标业务进程之后,将目标消息a保存至电子设备的共享内存中,假设目标消息a的在共享内存中的地址为Add-a。
步骤S303,消息生产进程生成并向目标业务进程发送目标通知消息。
具体的,在将目标消息保存至位于共享内存的第一存储空间之后,消息生产进程会生成与该目标消息对应的通知消息,该通知消息用于通知关注该目标消息的各目标业务进程,消息生产进程产生了新的其所关注的类型的消息,该通知消息可以称为目标通知消息。
消息生产进程在生成目标通知消息后,向各目标业务进程发送该目标通知消息,该目标通知消息用于向目标业务进程进行通知,以使得目标业务进程得知,其所关注的类型的消息已经存放于共享内存中,其中,目标通知消息还用于指示目标消息在第一存储空间中的存储地址。
请继续参见图4,当消息生产进程将目标消息发送到第一存储空间后,发送目标通知消息给关注该目标消息的目标业务进程,该目标通知消息存放于共享内存中,各目标业务进程对应的目标通知消息队列中,其中,该目标通知消息用于指示目标消息在第一存储空间中的存放地址。
继续上述的举例,消息生产进程在将目标消息a保存至第一存储空间后,因为业务进程1以及业务进程2关注了目标消息a,因此,消息生产进程会为业务进程1和业务进程2分别生成一个通知消息,并向业务进程1和业务进程2发送该通知消息,该通知消息中包含有目标消息a在第一存储空间中的地址Add-a。
步骤S304,目标业务进程根据目标通知消息,从第一存储空间中读取该目标消息。
具体的,因为目标通知消息用于指示目标消息在第一存储空间中的存储地址,所以,各目标业务进程可以根据消息生产进程发送的目标通知消息,从第一存储空间中读取到该目标消息。请继续参见图4,目标业务进程根据目标通知消息,从第一存储空间中读取该目标消息。
继续上述举例,业务进程1和业务进程2在收到目标通知消息后,根据目标通知消息中,目标消息a的存储地址Add-a,从共享内存中读取目标消息a,以便进行后续的业务处理流程。
综上所述,本申请实施例提供一种进程间消息处理方法,包括:消息生产进程根据所产生的目标消息的类型以及各业务进程所注册的消息类型,确定接收该目标消息的目标业务进程,该目标业务进程为多个业务进程中的至少一个业务进程;消息生产进程将该目标消息保存至电子设备的第一存储空间;消息生产进程生成并向目标业务进程发送目标通知消息,该目标通知消息用于指示所述第一存储空间的地址;目标业务进程根据该目标通知消息,从第一存储空间中读取目标消息。在上述步骤中,由于消息生产进程通过通知消息的方式,只需要将目标消息发送一份到共享内存中,而不必给每个目标业务进程都拷贝一份,避免了多份目标消息的拷贝以及拷贝后的多份目标消息在共享内存中,会占用大量存储空间的问题,同时,也减少了冗余消息的接收,提高了消息处理效率,进一步的,由于通知消息中,仅仅保存了目标消息在共享内存中的地址,因此,占用的存储空间远远小于目标消息本身所占用的存储空间,节约了消息传递通道和业务进程处理资源,并且,当进程间需要进行大批量数据交换的时候,可以提升数据的交换效率。
可选的,消息生产进程生成并向目标业务进程发送目标通知消息,具体可以是指,消息生产进程生成目标通知消息,并将该目标通知消息发送至与目标业务进程对应的第二存储空间中。
由于每个业务进程可能关注多个类型的消息,因此,不同类型的消息可以对应不同的目标通知消息,这些不同的目标通知消息组成一个通知消息队列,也即,每个业务进程对应一个通知消息队列,每个业务进程各自守护自己的通知消息队列。其中,每个业务进程对应的通知消息队列存储于第二存储空间中,其中,第二存储空间也为电子设备中,可以由多个进程共享的物理内存的一部分存储空间,即,第二存储空间也是位于电子设备的共享内存中的。
继续上述的举例,假设业务进程1对应的通知消息队列为通知消息队列1,业务进程2对应的通知消息队列为通知消息队列2,通知消息队列1和通知消息队列2存放于电子设备中的,且不同于目标消息队列存储地址的共享内存中。
可以理解的是,由于在消息生产进程和各业务进程进行通信之前,各业务进程向消息生产进程进行过主动注册,因此,当消息生产进程将生成的目标通知消息发送至各目标业务进程对应的第二存储空间中时,各目标业务进程便可以得知该目标通知消息,这个过程也就相当于步骤S403中的消息生产进程向目标业务进程发送该目标通知消息。
可选的,将目标通知消息发送至与目标业务进程对应的第二存储空间,包括:将目标通知消息添加至第二存储空间的各目标业务进程对应的通知消息队列的末尾,通知消息队列中包括至少一个通知消息,各通知消息按照接收时间排序,因此,可以理解的是,通知消息队列的存储地址为最先产生的目标通知消息在共享内存中的存储地址。
进一步的,消息生产进程在产生了一条目标消息后,需要确定将该消息具体发送给哪些业务进程,确定的方式有很多。本申请实施例中采用的是,在目标消息产生之前,各业务进程需要主动向消息生产进程进行注册,以告知消息生产进程它所关注的消息的类型,以便于消息生产进程在产生一条新的消息后,知道应该发送给哪个业务进程进行处理。
请参见图5,是本申请实施例提供的另一种进程间消息处理方法的流程示意图,根据所产生的目标消息的类型以及各业务进程所注册的消息类型,确定接收该目标消息的目标业务进程之前,如图5所示,该方法还包括:
步骤S501,消息生产进程接收目标业务进程的注册请求。
具体的,消息生产进程接收目标业务进程发送的注册请求,其中,注册请求中,包含具体的注册信息,该注册信息用于指示目标业务进程待注册的消息类型的标识,也即,注册请求用于指示目标业务进程待注册的消息类型。
由于消息生产进程产生的消息类型有很多种,各目标业务进程有可能需要全部关注,也有可能不需要全部都关注,因此,各目标业务进程可以根据自身业务的需要,选择关注全部类型的消息,也可以选择只关注部分类型的消息。可选的,注册请求中的注册信息中,除了包含用于指示消息类型的标识,还可以包含用于指示目标业务进程是否需要关注全部类型的消息的标识,例如,如果某目标业务进程需要关注全部类型的消息,则注册信息中的,用于指示目标业务进程是否需要关注全部类型的消息的标识可以设置为“任意”,用“any”表示,否则,可以设置为“全部”,用“part”表示。
步骤S502,消息生产进程对目标业务进程待注册的消息类型进行注册,并记录目标业务进程所注册的消息类型。
具体的,在收到目标业务进程发送的注册请求后,消息生产进程会对目标业务进程需要注册的消息类型进行记录。请继续参见图4,消息生产进程接收目标业务进程的注册请求,在收到目标业务进程发送的注册请求后,消息生产进程会对目标业务进程需要注册的消息类型进行记录。
步骤S503,消息生产进程向目标业务进程发送注册响应。
具体的,消息生产进程在对目标业务进程需要注册的消息类型进行注册后,需要向目标业务进程发送注册响应,其中,注册响应用于指示是否注册成功。
经过上述步骤S501、S502、S503之后,当消息生产进程在产生目标消息后,便能够确定将该目标消息发送给哪个或者哪些业务进程进行处理。
可选的,各业务进程如果需要修改其所关注的消息的类型,可以重新向消息生产进程发起注册请求,消息生产进程重新记录业务进程的注册请求,返回注册成功或者失败的消息。
本申请实施例中,通过各目标业务进程主动向消息生产进程发起注册请求,告知消息生产进程其所关注的消息类型,并可以根据实际情况重新发起注册请求以修改关注的消息类型,改变了原有的目标业务进程被动接收所有消息的方式,并可以使得消息生产进程在发送消息时,可以做到按需发送,精准发送,提高了消息的处理效率。
如果消息生产进程在产生了一条目标消息后,发现没有业务进程关注该目标消息,则将该目标消息丢弃。
可选的,消息生产进程根据所产生的目标消息的类型以及各业务进程所注册的消息类型,确定接收目标消息的目标业务进程之后,该方法还包括:若消息生产进程确定不存在接收目标消息的目标业务进程,则丢弃该目标消息。
由于消息生产进程通过各业务进程的注册,可以得知各业务进程所关注的消息类型,而对没有业务进程关注的类型的消息,可以直接丢弃,提升消息的生产速度。
为了更好地对目标消息进行管理,本申请实施例还提供了其它一些消息处理方法,例如,每产生一条通知,目标消息的引用计数加一,对于使用完毕的目标消息,其引用计数减一,进一步的,如果目标消息的引用计数为零,则将共享内存中的目标消息释放等。
可选的,消息生产进程生成并向目标业务进程发送目标通知消息之后,该方法还包括:消息生产进程将目标消息的引用计数加一。
具体的,消息生产进程产生目标消息并向目标业务进程发送目标通知消息之后,可以将该目标消息的引用计数加一,其中,引用计数的多少表征了该目标消息由多少个目标业务进程所关注。例如,如果某条目标消息的引用计数为8,则表示系统中,有8个目标业务进程对该目标消息进行了关注,即,有8个目标业务进程在后续的处理中,需要使用该目标消息。
可选的,目标业务进程根据目标通知消息,从第一存储空间中读取目标消息之后,该方法还包括:目标业务进程将所述目标消息的引用计数减一。
具体的,当目标业务进程根据目标通知消息,从第一存储空间中读取了目标消息之后,则说明该目标业务进程已经使用了该目标消息,因此,可以将该目标消息的引用计数减一,也即,使用了目标消息的目标业务进程,后续将不再关注该目标消息。
可选的,该方法还包括:消息生产进程判断目标消息的引用计数是否为零,若是,则从第一存储空间中删除该目标消息。
具体的,当目标业务进程从第一存储空间中读取目标消息之后,将该目标消息的引用计数减一,如果连续不断有目标业务进程从第一存储空间中读取目标消息之后,该目标消息的引用计数将被连续不断的减一,直到为零。当目标消息的引用计数为零时,则说明系统中已经没有目标业务进程关注该目标消息了,因此,可以由消息生产进程来判断目标消息的引用计数是否为零,如果为零,则将该目标消息从共享内从中释放,也即,从第一存储空间中删除该目标消息。
本申请实施例中,通过采用引用计数的方式记录目标消息的使用,目标业务进程根据目标通知消息中的目标消息的地址,访问目标消息,无需将目标消息拷贝多份,节省了系统资源,提高了消息传递速度。
可选的,该方法还包括:消息生产进程判断目标消息在第一存储空间中的保存时长是否大于预设时长,若是,从第一存储空间中删除该目标消息。
具体的,消息生产进程判断目标消息在第一存储空间中,保存的时长是否大于预设时长,如果是,且无目标业务进程访问该目标消息,则将该消息从第一存储空间中删除。
请参见图6,是本申请实施例提供的另一种进程间消息处理方法的流程示意图,如图6所示,该方法还包括:
步骤S601,目标业务进程每隔第一时长,更新活跃度值。
可选的,第一时长具体可以预先根据需要进行设置。
具体的,为了标识目标业务进程是否处于活跃状态,每个目标业务进程都有一个活跃度值,并且,每隔预先设置的第一时长,目标业务进程更新自己的活跃度值,其中,可以使用活跃度值是否在预设时间内更新,来表征该目标业务进程在系统中是否处于活跃状态,如果活跃度值在预设时间内更新,则消息生产进程认为该目标业务进程处于活跃状态,否则,如果活跃度值长时间没有更新,则消息生产进程认为该目标业务进程已断开连接。目标业务进程的活跃度值可以存储于第一存储空间,也可以存储于第二存储空间中。
例如,假设预先设置的第一时长为2秒,假设目标业务进程1的初始活跃度值为0,目标业务进程1每隔2秒将自己的活跃度值加一,经过6秒后,目标业务进程1的活跃度值更新为3。
步骤S602,消息生产进程每隔预先设置的第二时长,读取该活跃度值,若该活跃度值在预先设置的第三时长内没有更新,将目标消息的引用计数减一。
具体的,消息生产进程每隔预先设置的第二时长,会读取各目标业务进程的活跃度值,如果在预先设置的第三时长内,读取到的活跃度值没有更新,则消息生产进程认为该目标业务进程断开了连接,因此,将目标消息的引用计数减一,其中,预先设置的第二时长不小于预先设置的第一时长,而为了判断的准确性,预先设置的第三时长大于预先设置的第二时长,且预先设置的第三时长与第二时长的差值大于预先设定的阈值。
继续上述步骤S601中的举例,进一步的,假设预先设置的第二时长为3秒,预先设置的第三时长为20秒,消息生产进程每隔3秒,会读取目标业务进程1的活跃度值,那么,经过6秒后,读取到的目标业务进程1的活跃度值为3,消息生产进程继续每隔3秒读取目标业务进程1的活跃度值,如果在20秒内,消息生产进程多次读取到的目标业务进程1的活跃度值一直为3,则消息生产进程认为目标业务进程1,由于没有长时间更新自己的活跃度值,那么可以确定目标业务进程1断开了连接,因此,消息生产进程将目标消息的引用计数减一。
需要说明的是,步骤601和步骤602独立执行,执行顺序不分先后。
基于同一发明构思,本申请实施例中还提供了与该进程间消息处理方法对应的一种进程间消息处理装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述进程间消息处理方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
请参见图7,是本申请实施例提供的一种进程间消息处理装置的结构示意图,该装置应用于电子设备,该电子设备中运行有消息生产进程以及多个业务进程,如图7所示,该装置包括:
消息生产进程模块701,用于运行消息生产进程,根据所产生的目标消息的类型以及各业务进程所注册的消息类型,确定接收目标消息的目标业务进程,目标业务进程为多个业务进程中的至少一个业务进程;消息生产进程将该目标消息保存至电子设备的第一存储空间;消息生产进程生成并向目标业务进程发送目标通知消息,目标通知消息用于指示第一存储空间的地址。
目标业务进程模块702,用于运行目标业务进程,根据目标通知消息,从第一存储空间中读取目标消息。
在一种可能的实施方式中,消息生产进程模块701具体用于:
消息生产进程生成目标通知消息,并将目标通知消息发送至与目标业务进程对应的第二存储空间。
在一种可能的实施方式中,消息生产进程模块701还具体用于:
将目标通知消息添加至第二存储空间的通知消息队列的末尾,通知消息队列中包括至少一个通知消息,各通知消息按照接收时间排序。
在一种可能的实施方式中,消息生产进程模块701还具体用于:
消息生产进程接收目标业务进程的注册请求,注册请求用于指示目标业务进程待注册的消息类型;消息生产进程对目标业务进程待注册的消息类型进行注册,并记录目标业务进程所注册的消息类型;消息生产进程向目标业务进程发送注册响应,注册响应用于指示是否注册成功。
在一种可能的实施方式中,消息生产进程模块701还具体用于:
若确定不存在接收目标消息的目标业务进程,则丢弃目标消息。
在一种可能的实施方式中,消息生产进程模块701还具体用于:
消息生产进程将目标消息的引用计数加一;消息生产进程判断目标消息的引用计数是否为零,若是,则从第一存储空间中删除目标消息。
在一种可能实施方式中,目标业务进程模块702还具体用于:
目标业务进程将目标消息的引用计数减一。
在一种可能的实施方式中,消息生产进程模块701还具体用于:
消息生产进程判断目标消息在第一存储空间中的保存时长是否大于预设时长,若是,从第一存储空间中删除目标消息。
作为一种可能的实施方式,目标业务进程模块702还具体用于:
目标业务进程每隔预先设置的第一时长,更新活跃度值,活跃度值存储于所述第一存储空间或者第二存储空间中。
作为一种可能的实施方式,消息生产进程模块701还具体用于:
消息生产进程每隔预先设置的第二时长,读取活跃度值,若活跃度值在预先设置的第三时长内没有更新,将目标消息的引用计数减一;预先设置的第二时长不小于预先设置的第一时长,预先设置的第三时长大于所述预先设置的第二时长。
上述装置用于执行前述实施例提供的方法,关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再赘述。
以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个数字处理器(digital singnal processor,简称DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(Central Processing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称SOC)的形式实现。
本申请实施例还提供了一种电子设备800,如图8所示,是本申请实施例提供的电子设备800的结构示意图,包括:处理器801、存储器802、和总线803。存储器802存储有处理器801可执行的机器可读指令,当电子设备800运行时,处理器801与存储器802之间通过总线803通信,机器可读指令被处理器801执行时执行上述进程间消息处理方法实施例中的方法步骤。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述进程间消息处理方法实施例中的步骤。
具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述进程间消息处理方法实施例。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
Claims (10)
1.一种进程间消息处理方法,应用于电子设备,所述电子设备中运行有消息生产进程以及多个业务进程,其特征在于,所述方法包括:
所述消息生产进程根据所产生的目标消息的类型以及各业务进程所注册的消息类型,确定接收所述目标消息的目标业务进程,所述目标业务进程为所述多个业务进程中的至少一个业务进程;
所述消息生产进程将所述目标消息保存至所述电子设备的第一存储空间;
所述消息生产进程生成并向所述目标业务进程发送目标通知消息,所述目标通知消息用于指示所述第一存储空间的地址;
所述目标业务进程根据所述目标通知消息,从所述第一存储空间中读取所述目标消息。
2.根据权利要求1所述的方法,其特征在于,所述消息生产进程生成并向所述目标业务进程发送目标通知消息,包括:
所述消息生产进程生成所述目标通知消息,并将所述目标通知消息发送至与所述目标业务进程对应的第二存储空间。
3.根据权利要求2所述的方法,其特征在于,所述将所述目标通知消息发送至与所述目标业务进程对应的第二存储空间,包括:
将所述目标通知消息添加至所述第二存储空间的通知消息队列的末尾,所述通知消息队列中包括至少一个通知消息,各所述通知消息按照接收时间排序。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述消息生产进程根据所产生的目标消息的类型以及各业务进程所注册的消息类型,确定接收所述目标消息的目标业务进程之前,还包括:
所述消息生产进程接收所述目标业务进程的注册请求,所述注册请求用于指示所述目标业务进程待注册的消息类型;
所述消息生产进程对所述目标业务进程待注册的消息类型进行注册,并记录所述目标业务进程所注册的消息类型;
所述消息生产进程向所述目标业务进程发送注册响应,所述注册响应用于指示是否注册成功。
5.根据权利要求1-3任一项所述的方法,其特征在于,所述消息生产进程根据所产生的目标消息的类型以及各业务进程所注册的消息类型,确定接收所述目标消息的目标业务进程之后,还包括:
若确定不存在接收所述目标消息的目标业务进程,则丢弃所述目标消息。
6.根据权利要求1-3任一项所述的方法,其特征在于,所述消息生产进程生成并向所述目标业务进程发送目标通知消息之后,还包括:
所述消息生产进程将所述目标消息的引用计数加一;
所述目标业务进程根据所述目标通知消息,从所述第一存储空间中读取所述目标消息之后,还包括:
所述目标业务进程将所述目标消息的引用计数减一;
所述方法还包括:
所述消息生产进程判断所述目标消息的引用计数是否为零,若是,则从所述第一存储空间中删除所述目标消息。
7.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:
所述消息生产进程判断所述目标消息在所述第一存储空间中的保存时长是否大于预设时长,若是,从所述第一存储空间中删除所述目标消息。
8.一种进程间消息处理装置,应用于电子设备,所述电子设备中运行有消息生产进程以及多个业务进程,其特征在于,所述装置包括:
消息生产进程模块,用于运行所述消息生产进程,根据所产生的目标消息的类型以及各业务进程所注册的消息类型,确定接收所述目标消息的目标业务进程,所述目标业务进程为所述多个业务进程中的至少一个业务进程;将所述目标消息保存至所述电子设备的第一存储空间;生成并向所述目标业务进程发送目标通知消息,所述目标通知消息用于指示所述第一存储空间的地址;
目标业务进程模块,用于运行所述目标业务进程,根据所述目标通知消息,从所述第一存储空间中读取所述目标消息。
9.一种电子设备,其特征在于,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的程序指令,当电子设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述程序指令,以执行时执行如权利要求1-7任一项所述的进程间消息处理方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1-7任一项所述的进程间消息处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110914149.0A CN113590362A (zh) | 2021-08-10 | 2021-08-10 | 进程间消息处理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110914149.0A CN113590362A (zh) | 2021-08-10 | 2021-08-10 | 进程间消息处理方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113590362A true CN113590362A (zh) | 2021-11-02 |
Family
ID=78256947
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110914149.0A Pending CN113590362A (zh) | 2021-08-10 | 2021-08-10 | 进程间消息处理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113590362A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114138371A (zh) * | 2021-12-02 | 2022-03-04 | 北京天融信网络安全技术有限公司 | 配置动态加载方法、装置及计算机设备、存储介质 |
WO2023125209A1 (zh) * | 2021-12-27 | 2023-07-06 | 北京罗克维尔斯科技有限公司 | 进程间通信方法及其装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104809028A (zh) * | 2015-05-07 | 2015-07-29 | 厦门雅迅网络股份有限公司 | 一种本地多进程间数据订阅推送的方法 |
CN105677495A (zh) * | 2016-02-24 | 2016-06-15 | 京信通信技术(广州)有限公司 | 进程间通信方法和系统 |
CN106293969A (zh) * | 2016-08-09 | 2017-01-04 | 上海盈方微电子有限公司 | Linux进程间通讯方法及装置、进程退出监听方法 |
CN106330769A (zh) * | 2016-11-15 | 2017-01-11 | 腾讯科技(深圳)有限公司 | 一种业务处理方法及服务器 |
CN109032767A (zh) * | 2018-07-26 | 2018-12-18 | 苏州科达科技股份有限公司 | 异步多进程的业务处理系统、方法、装置及存储介质 |
CN110399229A (zh) * | 2018-04-25 | 2019-11-01 | 清华大学 | 进程间的通信方法、装置、系统、介质及终端 |
-
2021
- 2021-08-10 CN CN202110914149.0A patent/CN113590362A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104809028A (zh) * | 2015-05-07 | 2015-07-29 | 厦门雅迅网络股份有限公司 | 一种本地多进程间数据订阅推送的方法 |
CN105677495A (zh) * | 2016-02-24 | 2016-06-15 | 京信通信技术(广州)有限公司 | 进程间通信方法和系统 |
CN106293969A (zh) * | 2016-08-09 | 2017-01-04 | 上海盈方微电子有限公司 | Linux进程间通讯方法及装置、进程退出监听方法 |
CN106330769A (zh) * | 2016-11-15 | 2017-01-11 | 腾讯科技(深圳)有限公司 | 一种业务处理方法及服务器 |
CN110399229A (zh) * | 2018-04-25 | 2019-11-01 | 清华大学 | 进程间的通信方法、装置、系统、介质及终端 |
CN109032767A (zh) * | 2018-07-26 | 2018-12-18 | 苏州科达科技股份有限公司 | 异步多进程的业务处理系统、方法、装置及存储介质 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114138371A (zh) * | 2021-12-02 | 2022-03-04 | 北京天融信网络安全技术有限公司 | 配置动态加载方法、装置及计算机设备、存储介质 |
CN114138371B (zh) * | 2021-12-02 | 2024-02-06 | 北京天融信网络安全技术有限公司 | 配置动态加载方法、装置及计算机设备、存储介质 |
WO2023125209A1 (zh) * | 2021-12-27 | 2023-07-06 | 北京罗克维尔斯科技有限公司 | 进程间通信方法及其装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9736034B2 (en) | System and method for small batching processing of usage requests | |
US8196150B2 (en) | Event locality using queue services | |
CN113590362A (zh) | 进程间消息处理方法、装置、电子设备及存储介质 | |
US8874638B2 (en) | Interactive analytics processing | |
US6910062B2 (en) | Method and apparatus for transmitting packets within a symmetric multiprocessor system | |
CN101616083A (zh) | 一种报文转发方法和装置 | |
CN105630731A (zh) | 一种多cpu环境下网卡数据处理方法和装置 | |
CN109150662B (zh) | 消息传输方法、分布式系统、设备、介质和无人车 | |
CN110581887B (zh) | 数据处理方法、装置、区块链节点及存储介质 | |
CN110119304B (zh) | 一种中断处理方法、装置及服务器 | |
CN115080479B (zh) | 传输方法、服务器、设备、裸金属实例及基板管理控制器 | |
WO2017032152A1 (zh) | 将数据写入存储设备的方法及存储设备 | |
CN109873861B (zh) | 跨区块链节点的交互方法及装置、存储介质及电子设备 | |
CN113076281B (zh) | 一种Ceph内核客户端进行通信的方法、系统、设备及介质 | |
JP2006216049A (ja) | P2pネットワークにおけるヒルを減少させるための方法および装置 | |
CN112052104A (zh) | 基于多机房实现的消息队列的管理方法及电子设备 | |
CN114461371B (zh) | 一种服务器系统中断优化方法、装置、设备及介质 | |
WO2022194021A1 (zh) | 并发控制方法、网卡、计算机设备、存储介质 | |
CN116107774A (zh) | Io请求处理方法、装置、电子设备和存储介质 | |
US10565004B2 (en) | Interrupt and message generation independent of status register content | |
CN109309583B (zh) | 基于分布式系统的信息获取方法、装置、电子设备和介质 | |
CN116662267B (zh) | 一种基于云原生的分布式应用快照系统和快照创建方法 | |
JP2812274B2 (ja) | 疎結合多重計算機システムにおけるトランザクション負荷分散システム | |
CN116643896A (zh) | 进程间数据交互方法、系统、电子设备及存储介质 | |
CN114979153B (zh) | 负载均衡方法、计算机设备及存储装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |