进程间的通信方法、存储介质以及计算机设备与流程

文档序号:11182000阅读:742来源:国知局
进程间的通信方法、存储介质以及计算机设备与流程

本发明涉及计算机技术领域,特别是涉及一种进程间的通信方法、存储介质以及计算机设备。



背景技术:

共享内存(sharememory)是指在多进程的计算机系统中,可以被不同进程访问的内存,通过共享内存可以实现多个进程共享同一块内存区来进行数据交互。但是,目前共享内存只能用于c语言的结构(struct)和数组等连续内存块,而且,这些内存块因为是一段连续内存,所以,一旦分配好,长度就固定了。而对于复杂的c++类对象等就无能为力了,如map等数据结构并不是一段连续的内存,可能会存放自己的私有成员,从而不能直接使用传统的共享内存技术来进行交互。

目前对于复杂对象的跨进程调度,一般通过序列化(serialization),序列化是将对象的状态信息转换为可以存储或传输的形式的过程,在序列化期间,对象将其当前状态写入到临时或持久性存储区,以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。但是,传统的序列化和反序列化过程会对性能造成较大的影响。



技术实现要素:

基于此,有必要针对复杂对象跨进程调度的问题,提供一种进程间的通信方法、存储介质以及计算机设备。

一种进程间的通信方法,包括:根据主进程的共享内存请求分配共享内存块,并为共享内存块分配唯一标识,记录与唯一标识对应的共享内存块相对主进程的偏移地址;获取任一进程对共享内存块的写数据请求,其中,写数据请求包括待写入数据和待写入数据的数据长度;根据待写入数据的数据长度将待写入数据写入共享内存块,并记录待写入数据相对共享内存块的偏移地址以及数据长度。

在其中一个实施例中,还包括:获取任一进程对共享内存块的读数据请求,其中,读数据请求中包括与共享内存块对应的唯一标识;根据唯一标识返回存储在与唯一标识对应的共享内存块的数据和数据长度。

在其中一个实施例中,根据唯一标识返回存储在与唯一标识对应的共享内存块的数据和数据长度,包括:根据唯一标识确定与唯一标识对应的共享内存块相对主进程的偏移地址;根据与唯一标识对应的共享内存块相对主进程的偏移地址确定共享内存块;根据共享内存块返回存储在共享内存块的数据以及数据长度。

在其中一个实施例中,任一进程包括主进程或有权限使用共享内存块的其他进程。

在其中一个实施例中,根据待写入数据的数据长度将待写入数据写入共享内存块之前,还包括:锁定共享内存块。

在其中一个实施例中,根据待写入数据的数据长度将待写入数据写入共享内存块之后,还包括:对共享内存块解除锁定。

一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上所述方法的步骤。

一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如下步骤:根据主进程的共享内存请求分配共享内存块,并为共享内存块分配唯一标识,记录与唯一标识对应的共享内存块相对主进程的偏移地址;获取任一进程对共享内存块的写数据请求,其中,写数据请求包括待写入数据和待写入数据的数据长度;根据待写入数据的数据长度将待写入数据写入共享内存块,并记录待写入数据相对共享内存块的偏移地址以及数据长度。

在其中一个实施例中,处理器执行所述程序时还实现如下步骤:获取任一进程对共享内存块的读数据请求,所述读数据请求中包括与共享内存块对应的唯一标识;根据唯一标识返回写入与唯一标识对应的共享内存块的数据和数据长度。

在其中一个实施例中,根据唯一标识返回写入与唯一标识对应的共享内存块的数据和数据长度,包括:根据唯一标识确定与唯一标识对应的共享内存块相对主进程的偏移地址;根据与唯一标识对应的共享内存块相对主进程的偏移地址确定共享内存块;根据共享内存块返回写入共享内存块的数据以及数据长度。

上述进程间的通信方法、存储介质以及计算机设备,通过主进程的共享内存请求分配共享内存块,并为共享内存块分配唯一标识,记录与唯一标识对应的共享内存块相对主进程的偏移地址,在对共享内存块写入数据时,记录写入数据相对共享内存块的偏移地址以及数据长度,以使其他进程可以通过共享内存块读取数据,从而可以通过共享内存实现复杂对象的跨进程调度。

附图说明

图1为一个实施例中进程间的通信方法的流程图;

图2为一个实施例中进程间的通信方法的流程图;

图3为一个实施例中进程间的通信方法的信令交互示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。

本发明实施例提供了一种进程间的通信方法,如图1所示,包括如下步骤:

步骤s101,根据主进程的共享内存请求分配共享内存块。

在本实施例中,以申请共享内存的进程为主进程,内存系统根据主进程的共享内存请求而分配共享内存块,同时为该共享内存块分配唯一标识,并记录与该唯一标识对应的共享内存块相对主进程的偏移地址。其中,共享内存块的唯一标识可以通过不同的字符串或者id来标识,以区分不同的共享内存块。

共享内存块则用于主进程和需要交互的其他进程即有权限使用此共享内存块的其他进程之间进行复杂数据的交互,其中,复杂数据包括但不限于c++类对象,如map等。

步骤s102,获取任一进程对共享内存块的写数据请求。

在本实施例中,主进程和有权限使用此共享内存块的其他进程都可以在该共享内存块中动态插入各种复杂数据或读取数据,从而实现复杂数据的交互。因此,主进程和有权限使用此共享内存块的其他进程中的任一进程都可以通过该共享内存块的唯一标识和相对主进程的偏移地址而动态地在该共享内存块中写入各种复杂数据。

内存系统获取任一进程对该共享内存块的写数据请求,其中,写数据请求包括待写入数据和该待写入数据的数据长度。

步骤s103,根据待写入数据的数据长度将待写入数据写入共享内存块,并记录该待写入数据相对共享内存块的偏移地址以及数据长度。

在写入数据时,内存系统根据待写入数据的数据长度将待写入数据写入共享内存块,即根据数据长度为其分配空间,从而实现内存的动态扩展。同时,内存系统记录该待写入数据相对共享内存块的偏移地址以及该待写入数据的数据长度,从而使得有权限可以使用此共享内存块的进程可以根据该共享内存块相对主进程的偏移地址、该待写入数据相对共享内存块的偏移地址以及该待写入数据的数据长度读取存储在该共享内存块中的待写入数据,以实现复杂数据的跨进程间交互通信。

在一个实施例中,根据待写入数据的数据长度将待写入数据写入共享内存块之前,内存系统会对该共享内存块进行加锁,即锁定该共享内存块,以避免当多个进程同时访问操作同一个共享内存块时出现的数据错误,如两个进程同时写数据,或者一个进程写完数据,另外一个进程还没读完数据,其他进程又开始写数据等。本实施例通过锁定共享内存块,从而使得同一时刻只有一个进程对该共享内存块进行写操作,进而保证数据的正确性、完整性、一致性。并且,在对该共享内存块写入数据之后,内存系统会对该共享内存块解除锁定,以使其他进程可以访问操作该项共享内存块。

在一个实施例中,如图2所示,该方法还可以包括:

步骤s201,获取任一进程对共享内存块的读数据请求,读数据请求中包括与该共享内存块对应的唯一标识。

本实施例主要阐述了对共享内存块的读数据流程,当任一进程需要读取共享内存块中的数据时,则向内存系统发送读数据请求,其中,读数据请求中包括待读取的共享内存块的唯一标识。

在无特别说明的情况下,本实施例的任一进程是指主进程和有权限使用此共享内存块的其他进程。

步骤s202,根据唯一标识返回存储在与该唯一标识对应的共享内存块的数据和对应的数据长度。

在本实施例中,内存系统根据任一进程对共享内存块的读数据请求中携带的共享内存块的唯一标识,确定与该唯一标识对应的共享内存块相对主进程的偏移地址,从而根据该共享内存块相对主进程的偏移地址确定共享内存块,并向请求的进程返回存储在该共享内存块的数据以及对应的数据长度,使得请求的进程可以在自己的进程中还原出一个与该共享内存块相同的共享内存结构。

本实施例通过共享内存块实现复杂数据在不同进程间的交互,从而不存在序列化的内存拷贝过程,因此,不会消耗额外的内存资源;并且由于不会有序列化和反序列化过程,因此提高了进程间交互的效率。

图3为一个实施例中进程间的通信方法的信令图,为了方便理解,在本实施例中,主进程采用进程a表示,有权限使用该共享内存块的其他进程采用进程b表示,本实施例以进程a写数据、进程b读数据为例进行说明。如图3所示,包括:

步骤s301,进程a向内存系统申请共享内存块。

当进程a需要与其他进程进行复杂数据交互的时候,则向内存系统申请共享内存块。

步骤s302,内存系统为进程a创建共享内存块。

在本实施例中,内存系统为进程a创建共享内存块,并为该共享内存块分配唯一标识shma,同时记录该共享内存块shma相对主进程的偏移地址。

由于共享内存块shma是由进程a申请的,因此,一旦进程a被销毁,则该共享内存块shma就必须要回收。

步骤s303,进程a请求向共享内存块shma写入数据dataa。

当进程a需要向共享内存块shma写入数据dataa时,则向内存系统发送写数据请求,其中,写数据请求中包括待写入数据dataa和dataa的数据长度。

步骤s304,内存系统为共享内存块shma加锁。

在开始写入数据dataa之前,内存系统会对该共享内存块shma进行加锁,从而锁定shma,以避免当多个进程同时访问操作shma时出现的数据错误,使得同一时刻只有一个进程对shma进行写操作,以保证数据的正确性、完整性、一致性。

步骤s305,内存系统在共享内存块shma中插入数据dataa。

内存系统在对shma进行锁定后,则可以在共享内存块shma中插入数据dataa,并记录数据dataa相对该共享内存块shma的偏移地址以及数据dataa的长度。

步骤s306,内存系统为共享内存块释放锁。

在写入数据dataa之后,内存系统会对该共享内存块shma解除锁定,以使其他进程如进程b可以访问操作该共享内存块shma。

步骤s307,进程b向内存系统请求读取共享内存块shma。

当进程b需要获取进程a写入shma的复杂数据dataa时,则向内存系统发送读数据请求,其中,读数据请求中包括待读取的共享内存块shma的唯一标识“shma”。

步骤s308,内存系统通过shma查询共享内存块。

内存系统根据进程b对共享内存块shma的读数据请求,查询与读数据请求中的唯一标识“shma”对应的共享内存块相对主进程的偏移地址,从而根据该共享内存块相对主进程的偏移地址确定共享内存块shma。

步骤s309,向进程b返回查询到的共享内存块shma。

内存系统根据查询结果向进程b返回共享内存块shma,包括shma相对主进程的偏移地址。

步骤s310,进程b通过内存系统在共享内存块shma中检索dataa。

进程b在内存系统返回的共享内存块shma中检索数据dataa。

步骤s311,向进程b返回dataa以及dataa的长度。

内存系统根据检索结果向进程b返回dataa以及dataa的长度,使得进程b可以在自己的进程中还原出dataa,从而实现进程a与进程b之间对复杂数据dataa的跨进程交互。

本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如下步骤:根据主进程的共享内存请求分配共享内存块,并为共享内存块分配唯一标识,记录与唯一标识对应的共享内存块相对主进程的偏移地址;获取任一进程对共享内存块的写数据请求,其中,写数据请求包括待写入数据和待写入数据的数据长度;根据待写入数据的数据长度将待写入数据写入共享内存块,并记录待写入数据相对共享内存块的偏移地址以及该待写入数据的数据长度。

在一个实施例中,还包括:获取任一进程对共享内存块的读数据请求,其中,读数据请求中包括与共享内存块对应的唯一标识;根据唯一标识返回存储在与唯一标识对应的共享内存块的数据和所述数据长度。

在一个实施例中,根据唯一标识返回存储在与唯一标识对应的共享内存块的数据和数据长度,包括:根据唯一标识确定与唯一标识对应的共享内存块相对主进程的偏移地址;根据与唯一标识对应的共享内存块相对主进程的偏移地址确定共享内存块;根据共享内存块返回存储在共享内存块的数据以及所述数据长度。

在一个实施例中,任一进程包括主进程或有权限使用共享内存块的其他进程。

在一个实施例中,根据待写入数据的数据长度将待写入数据写入共享内存块之前,还包括:锁定共享内存块。

在一个实施例中,根据待写入数据的数据长度将待写入数据写入共享内存块之后,还包括:对共享内存块解除锁定。

本发明实施例还提供了一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现如下步骤:根据主进程的共享内存请求分配共享内存块,并为共享内存块分配唯一标识,记录与唯一标识对应的共享内存块相对主进程的偏移地址;获取任一进程对共享内存块的写数据请求,其中,写数据请求包括待写入数据和待写入数据的数据长度;根据待写入数据的数据长度将待写入数据写入共享内存块,并记录待写入数据相对共享内存块的偏移地址以及该待写入数据的数据长度。

在一个实施例中,还包括:获取任一进程对共享内存块的读数据请求,其中,读数据请求中包括与共享内存块对应的唯一标识;根据唯一标识返回存储在与唯一标识对应的共享内存块的数据和所述数据长度。

在一个实施例中,根据唯一标识返回存储在与唯一标识对应的共享内存块的数据和数据长度,包括:根据唯一标识确定与唯一标识对应的共享内存块相对主进程的偏移地址;根据与唯一标识对应的共享内存块相对主进程的偏移地址确定共享内存块;根据共享内存块返回存储在共享内存块的数据以及所述数据长度。

在一个实施例中,任一进程包括主进程或有权限使用共享内存块的其他进程。

在一个实施例中,根据待写入数据的数据长度将待写入数据写入共享内存块之前,还包括:锁定共享内存块。

在一个实施例中,根据待写入数据的数据长度将待写入数据写入共享内存块之后,还包括:对共享内存块解除锁定。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1