CN116841760A - 进程间的通信方法、装置、电子设备及存储介质 - Google Patents
进程间的通信方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN116841760A CN116841760A CN202210290507.XA CN202210290507A CN116841760A CN 116841760 A CN116841760 A CN 116841760A CN 202210290507 A CN202210290507 A CN 202210290507A CN 116841760 A CN116841760 A CN 116841760A
- Authority
- CN
- China
- Prior art keywords
- memory
- space
- communication
- message
- address
- 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
- 238000000034 method Methods 0.000 title claims abstract description 444
- 230000006854 communication Effects 0.000 title claims abstract description 266
- 238000004891 communication Methods 0.000 title claims abstract description 258
- 230000015654 memory Effects 0.000 claims abstract description 478
- 238000013507 mapping Methods 0.000 claims description 17
- 238000004590 computer program Methods 0.000 claims description 11
- 238000010586 diagram Methods 0.000 description 15
- 238000005516 engineering process Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 239000002699 waste material Substances 0.000 description 6
- 230000002159 abnormal effect Effects 0.000 description 5
- 230000005856 abnormality Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000004984 smart glass Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
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/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请实施例公开了一种进程间的通信方法、装置、电子设备及存储介质。该方法,包括:在用户空间的第一进程从所述用户空间提供的消息内存池中申请内存空间,并将通信消息写入所述内存空间;所述第一进程将所述内存空间对应的地址信息,写入与所述用户空间中的第二进程之间的通信管道中;所述第二进程从所述通信管道中获取所述地址信息,并根据所述地址信息从所述内存空间读取所述通信消息。上述的进程间的通信方法、装置、电子设备及存储介质,能够减少进程间通信时所产生的开销,并提高进程间的通信效率。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种进程间的通信方法、装置、电子设备及存储介质。
背景技术
为了保障电子设备上的功能能够正常运行实现,进程间通信是电子设备中的操作系统所不可或缺的套件,进程间通信就是在不同进程之间传播或交换信息。通过进程间通信,操作系统能够协调不同的进程,保证各个进程正常运行及执行相应的任务。目前,操作系统中的进程间通信大多需要通过系统调用的方式实现,存在开销大、通信效率较低的问题。
发明内容
本申请实施例公开了一种进程间的通信方法、装置、电子设备及存储介质,能够减少进程间通信时所产生的开销,并提高进程间的通信效率。
本申请实施例公开了一种进程间的通信方法,包括:
在用户空间的第一进程从所述用户空间提供的消息内存池中申请内存空间,并将通信消息写入所述内存空间;
所述第一进程将所述内存空间对应的地址信息,写入与所述用户空间中的第二进程之间的通信管道中;
所述第二进程从所述通信管道中获取所述地址信息,并根据所述地址信息从所述内存空间读取所述通信消息。
本申请实施例公开了一种进程间的通信装置,包括:
消息写入模块,用于在用户空间的第一进程从所述用户空间提供的消息内存池中申请内存空间,并将通信消息写入所述内存空间;
地址写入模块,用于通过所述第一进程将所述内存空间对应的地址信息,写入与所述用户空间中的第二进程之间的通信管道中;
消息读取模块,用于通过所述第二进程从所述通信管道中获取所述地址信息,并根据所述地址信息从所述内存空间读取所述通信消息。
本申请实施例公开了一种电子设备,包括存储器及处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器实现如上所述的方法。
本申请实施例公开了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被计算机设备中的处理器执行时,使得所述处理器实现如上任一所述的方法。
本申请实施例公开的进程间的通信方法、装置、电子设备及存储介质,在用户空间的第一进程从用户空间提供的消息内存池中申请内存空间,并将通信消息写入该内存空间,第一进程将内存空间对应的地址信息,写入与用户空间中的第二进程之间的通信管道中,第二进程从通信管道中获取该地址信息,并根据该地址信息从内存空间读取通信消息,在整个进程间的通信过程中不需用户态及内核态的相互切换,通信消息不需要从用户空间拷贝到内核空间再从内核空间拷贝到用户空间,无需经过系统调用,能够减少进程间通信时所产生的开销,并提高进程间的通信效率;而且利用消息内存池进行进程间通信时的内存分配管理,可使分配的内存空间更加合理,避免不必要的开销,减少资源浪费。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为相关技术中进程间通信的示意图;
图2为一个实施例中进程间的通信方法的流程图;
图3为一个实施例中进程间通信的示意图;
图4为另一个实施例中进程间的通信方法的流程图;
图5A为一个实施例中建立消息内存池的示意图;
图5B为一个实施例中消息内存池的示意图;
图6为又一个实施例中进程间的通信方法的流程图;
图7为一个实施例中通信管道是否存在待读取的数据的示意图;
图8为一个实施例中进程间的通信装置的框图;
图9为一个实施例中电子设备的结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请实施例及附图中的术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
可以理解,本申请所使用的术语“第一”、“第二”等可在本文中用于描述各种元件,但这些元件不受这些术语限制。这些术语仅用于将第一个元件与另一个元件区分。举例来说,在不脱离本申请的范围的情况下,可以将第一进程称为第二进程,且类似地,可将第二进程称为第一进程。第一进程和第二进程两者属于进程,但其不是同一进程。另外,需要说明的是,本申请实施例中所使用的术语“多个”等指的是两个或两个以上。
Linux操作系统作为一个免费、开源,支持多线程、多进程、多种调度方式并存,一直以来广受众开发者喜好,被应用到各种的电子设备中。由于Linux操作系统本身不是一个实时性操作系统,较难将其应用在需要高实时性的场景,因此,将Linux操作系统这样一个非实时的操作系统尽可能的提高其实时性以满足某些对实时性较高的场景一直以来都是众多单位研究的课题。而进程间通信作为Linux操作系统中不可或缺的套件,受Linux操作系统的管理,基本采用系统调用的方式进行实现。在进行进程间通信的过程中,并不是立即给进程使用的虚拟内存与物理内存建立映射关系,进程会先占用空间地址,当从用户空间切换至内核空间后,再建立虚拟内存与物理内存,因此会产生缺页异常的情况,导致进程间通信不稳定。
而且,在进程间进行通信时,通信消息需要经过两次数据拷贝,在消息发送时需要先将通信消息从用户空间拷贝到内核空间,在消息接收时需要将通信消息从内核空间拷贝到用户空间,进程需要在用户态及内核态之间相互切换,导致进程间通信时所产生的开销大,通信效率低。图1为相关技术中进程间通信的示意图。如图1所示,进程A与进程B进行通信时需要经过系统调用,通信消息先从用户空间拷贝到内核空间,再从内核空间拷贝到用户空间,进程A及进程B也需要在用户态及内核态之间进行切换。
在本申请实施例中,提供一种进程间的通信方法、装置、电子设备及存储介质,在整个进程间的通信过程中不需用户态及内核态的相互切换,通信消息不需要从用户空间拷贝到内核空间再从内核空间拷贝到用户空间,无需经过系统调用,能够减少进程间通信时所产生的开销,提高进程间通信的稳定性,并提高了进程间的通信效率;而且利用消息内存池进行进程间通信时的内存分配管理,可使分配的内存空间更加合理,避免不必要的开销,减少资源浪费。
如图2所示,在一个实施例中,提供一种进程间的通信方法,该方法可应用于电子设备,该电子设备可包括但不限于手机、平板电脑、车载终端、笔记本电脑、PC(PersonalComputer,个人计算机)、可穿戴设备(如智能手表、智能眼镜)等。电子设备上运行的操作系统可以是Linux操作系统,也可是其它操作系统,如Windows、IOS、安卓等,电子设备上运行的操作系统在本申请实施例中不作限定。该方法可包括以下步骤:
步骤210,在用户空间的第一进程从用户空间提供的消息内存池中申请内存空间,并将通信消息写入内存空间。
电子设备的操作系统中可运行有一个或多个进程,进程是计算机中的程序关于某数据集合上的一次运行活动,是操作系统进行资源分配和调度的基本单位,是操作系统结构的基础。在操作系统中,虚拟内存可被划分为用户空间及内核空间,其中,用户空间是普通应用程序可访问的内存区域,该一个或多个进程可运行在操作系统的用户空间,内核空间则是操作系统内核访问的区域,独立于普通的应用程序,内核空间是受保护的内存空间。每个进程的用户空间相对独立,因此,在相关技术中,在进行进程间通信时,用户空间的每个进程可以通过系统调用的方式进入内核空间,通过内核空间中建立的消息管道进行通信,进程需要在用户态与内核态之间切换,传递的通信消息也需要在用户空间及内核空间进行数据拷贝。
在本申请实施例中,可在用户空间构建有一个或多个消息内存池,每个消息内存池中可包括多个可供用户空间的进程访问的内存块,消息内存池可理解为电子设备中的物理内存映射到用户空间所提供的内存资源池,消息内存池可作为进程间通信的载体。进一步地,该映射到用户空间的物理内存可以是不受操作系统管理的物理内存,而是独立受操作系统管理的其它物理内存,因此在访问该物理内存时不需要通过系统调用的方式进行访问。另外,由于各个进程的用户空间是相互独立的,因此需要将该物理内存的物理地址分别与各个进程的用户空间的空间地址(空间地址为虚拟地址)进行映射。例如,进程A在用户空间的空间地址为1234,进程B在用户空间的空间地址为5678,则可将该物理内存的物理地址分别与进程A的空间地址1234,以及与进程B的空间地址5678进行映射。
用户空间中的第一进程可指的是进程间通信的消息发送方,在第一进程需要向作为消息接收方的第二进程发送通信消息时,第一进程可从用户空间提供的消息内存池中申请内存空间。该消息内存池中包括的内存块与第一进程的用户空间及第二进程的用户空间均有建立相应的映射关系,也即,第一进程及第二进程均能够正常访问该消息内存池的内存块。
在一些实施例中,第一进程可确定待发送的通信消息的消息长度(即通信消息所占的空间大小),并根据该消息长度从消息内存池中申请内存空间,该内存空间的空间大小可大于或等于消息长度,且内存空间中不存在空的内存块。例如,待发送的通信消息的消息长度为6byte(字节),消息内存池中每个内存块的大小为4byte,则可申请2个内存块作为内存空间。
在一些实施例中,用户空间中可构建有多个消息内存池,各个消息内存池中可包括具有不同内存块规格的内存块,即各个消息内存池中包含的内存块的大小可不同,例如,消息内存池A中每个内存块的大小为4byte、消息内存池B中每个内存块的大小为12byte等,但不限于此。第一进程可根据待发送的通信消息的消息长度以及各个消息内存池对应的内存块规格,确定与消息长度匹配的消息内存池。
可选地,该与消息长度匹配的消息内存池可以是内存块规格与消息长度最接近的消息内存池,例如,消息长度为6byte,则消息内存池A的内存块规格更接近该消息长度,则可确定消息内存池A为与消息长度匹配的消息内存池。
可选地,该与消息长度匹配的消息内存池也可以是浪费空间最少的消息内存池,浪费空间可为预计申请的内存块数量与内存块规格的乘积再减去该消息长度。例如,消息长度为8byte,消息内存池A中每个内存块的大小为4byte、消息内存池B中每个内存块的大小为12byte,则消息内存池A对应的预计申请的内存块数量为2,浪费空间为2*4-8=0,消息内存池B对应的预计申请的内存块数量为1,浪费空间为1*12-8=4,则可确定消息内存池A为与消息长度匹配的消息内存池。
在第一进程确定与消息长度匹配的消息内存池后,可再根据该消息长度从该匹配的消息内存池中申请内存空间。
在本申请实施例中,第一进程根据待发送的通信消息的消息长度向消息内存池申请内存空间,既可以保证通信消息正常写入申请的内存空间,且可避免申请的内存空间过大造成内存浪费的情况,利用消息内存池可更加灵活地配置进程间通信所使用的内存空间,减少开销。
第一进程从消息内存池申请内存空间后,可根据该内存空间与第一进程在用户空间的空间地址的映射关系,对该内存空间进行访问,以将通信消息写入该内存空间中。
步骤220,第一进程将内存空间对应的地址信息,写入与用户空间中的第二进程之间的通信管道中。
进行通信的第一进程与第二进程之间可建立通信管道,在本申请实施例中,该通信管道可建立在用户空间中,通信管道可以是预先建立的一块缓存空间,用于缓存第一进程与第二进程之间的通信数据。第一进程可将内存空间对应的地址信息写入通信管道,以使得第二进程可从该通信管道中获取该内存空间对应的地址信息,并根据该地址信息对内存空间进行访问。
在一些实施例中,由于各个进程的用户空间相对独立,各个进程在用户空间的空间地址不同,因此,消息内存池中的内存块映射到各个进程在用户空间的空间地址也不同,即各个内存块对于不同进程来说所映射的虚拟地址不同。为了保证第一进程及第二进程均能够正常访问同一内存空间,则内存空间的空间地址可以是内存空间的虚拟地址相对于所映射的进程在用户空间的空间地址的地址偏移,该地址偏移也可理解为是内存空间相对于所在物理内存的物理基地址的偏移,因此,对于不同进程来说同一内存空间的地址偏移是相同的。从而可保证第一进程及第二进程根据该内存空间对应的地址信息,可准确访问内存空间。
在其它的实施例中,进程可以将物理内存映射到用户空间时指定映射到用户空间的地址,从而使得物理内存映射到各个进程在用户空间中的空间地址相同,则内存空间对应的地址信息也可以是该内存空间映射到用户空间的虚拟地址。
步骤230,第二进程从通信管道中获取地址信息,并根据地址信息从内存空间读取通信消息。
第二进程可从通信管道中获取内存空间的地址信息,并根据该内存空间与第二进程的用户空间的映射关系,将该地址信息映射到内存空间的物理地址,从而对内存空间进行访问,读取该内存空间中存储的通信消息,完成从第一进程到第二进程的通信消息的传递。通过将内存空间的地址信息写入通信管道,即以指针的方式就完成第一进程与第二进程间之间的消息传递,不需要进行数据拷贝,可以有效提高第一进程与第二进程之间的通信效率。
图3为一个实施例中进程间通信的示意图。如图3所示,运行在用户空间的进程A与进程B之间进行通信,用户空间中可构建有一个或多个消息内存池。进程A可从用户空间提供的消息内存池中申请内存空间,并将通信消息写入该内存空间。进程A可将该内存空间的地址信息写入与进程B之间的消息管道中,进程B从该消息管道中获取内存空间的地址信息,以从该内存空间中读取通信消息。进程A与进程B之间的通信均是在用户空间中进行,进程A与进程B不需在用户态及内核态之间进行切换,通信消息也无需从用户空间拷贝到内核空间再从内核空间拷贝到用户空间。
在本申请实施例中,在整个进程间的通信过程中不需用户态及内核态的相互切换,通信消息不需要从用户空间拷贝到内核空间再从内核空间拷贝到用户空间,无需经过系统调用,能够减少进程间通信时所产生的开销,并提高进程间的通信效率;而且利用消息内存池进行进程间通信时的内存分配管理,可使分配的内存空间更加合理,避免不必要的开销,减少资源浪费。
如图4所示,在另一个实施例中,提供一种进程间的通信方法,可应用于上述的电子设备,该方法可包括以下步骤:
步骤402,在用户空间的一个或多个进程,将预留的物理内存分别映射到各个进程在用户空间中的空间地址,并建立一个或多个消息内存池。
预留的物理内存可为不受操作系统管理的物理内存,与其它受操作系统管理的物理内存相互独立。可选地,电子设备可在操作系统初始化时,向操作系统声明预留的物理内存,预留的物理内存的内存空间可根据实际需求进行设置,在此不作限制。
在用户空间运行的一个或多个进程,可分别将预留的物理内存映射到各自在用户空间中的空间地址(即各进程对应的虚拟地址),建立该预留的物理内存与各个进程的用户空间的空间地址之间的映射关系,例如,进程A在用户空间的空间地址为1234,进程B在用户空间的空间地址为5678,则该预留的物理内存的物理地址映射到进程A的空间地址1234,以及该预留的物理内存的物理地址映射到进程B的空间地址5678。可选地,可在进程启动并进行初始化的过程中,将预留的物理内存映射到自身在用户空间中的虚拟地址。
可在用户空间中建立一个或多个消息内存池,各个消息内存池对应的内存大小可不同,每个消息内存池中可包括多个内存块,不同消息内存池的内存块的内存块规格可相同也可不同。作为一种实施方式,可预先建立配置文件,配置文件中记录建立的消息内存池数量、每个消息内存池对应的内存大小、每个消息内存池对应的内存块规格等配置信息,可读取该配置文件中的配置信息,并根据该配置信息建立一个或多个消息内存池。
示例性地,图5A为一个实施例中建立消息内存池的示意图。如图5A所示,用户空间中的一个或多个进程可将预留的物理内存分别映射到各自的用户空间,建立预留的物理内存与各个进程在用户空间的虚拟地址之间的映射关系,该预留的物理内存不受操作系统管理。可在用户空间建立一个或多个消息内存池,供用户空间中的各个进程在进程通信时使用。
在一些实施例中,消息内存池可包括内存池管理头结点及多个具有相同内存块规格的内存块,该内存池管理头结点用于描述消息内存池中各个内存块的内存块规格、消息内存池包含的内存块数量及消息内存池对应的内存大小中的一种或多种信息。其中,内存块规格指的是每个内存块所占的空间大小,同一消息内存池内的各个内存块的内存块规格可相同。消息内存池对应的内存大小指的是整个消息内存池所占的空间大小。
作为一种具体实施方式,消息内存池还可包括内存块队列,该内存块队列中存储有消息内存池中的各个内存块的地址信息。具体地,由于预留的物理内存映射到各个进程在用户空间的虚拟地址不同,为了能够使用链表等方式将各个内存块连接以形成消息内存池,在本申请实施例中,各个内存块的地址信息可包括内存块相对于所映射的用户空间的基地址的地址偏移。由于消息内存池中的各个内存块相对于预留的物理内存的物理基地址的地址偏移是固定的,因此,在将预留的物理内存映射到各个进程的用户空间后,虽然各个进程在用户空间的虚拟地址不同,各个内存块相对于所映射的进程在用户空间的基地址的地址偏移不会发生变化,从而可实现利用链表等方式形成内存块队列,以方便对消息内存池进行管理。
例如,消息内存池对应的内存块规格为4byte,第1个内存块相对于预留的物理内存的物理基地址的地址偏移是4byte,则第2个内存块相对于预留的物理内存的物理基地址的地址偏移是8byte,第3个内存块相对于预留的物理内存的物理基地址的地址偏移是12byte……,以此类推,在将预留的物理内存映射到各个进程的用户空间后,预留的物理内存的物理基地址与各个进程在用户空间的基地址映射(如映射到进程A在用户空间的基地址1234,映射到进程B在用户空间的基地址5678),则第1个内存块所映射的虚拟地址相对于各个进程在用户空间的基地址的地址偏移还是4byte(如第1个内存块映射到进程A的虚拟地址为1234+4,第1个内存块映射到进程B的虚拟地址为5678+4),第2个内存块所映射的虚拟地址相对于各个进程在用户空间的基地址的地址偏移还是8byte(如第2个内存块映射到进程A的虚拟地址为1234+8,第2个内存块映射到进程B的虚拟地址为5678+8),……,以此类推。内存块相对于不同进程在用户空间的基地址的地址偏移是相同的,不会因为映射的进程不同发生改变。
示例性地,图5B为一个实施例中消息内存池的示意图。如图5B所示,消息内存池可包括内存池管理头结点、多个内存块及内存块队列。其中,内存池管理头结点可包括以下字段:unit_size、offset、total、blocknum等,unit_size表示内存块规格,offset用于指向内存块队列的基址,total表示消息内存池对应的内存大小,blocknum表示消息内存池包含的内存块数量。buffer段的内存被分割为相同内存块规格的多个内存块,内存块队列则存储各个内存块对应的地址信息,dx1对应消息内存池的第1个内存块,dx2对应第2个内存块,dx3对应第3个内存块……,dxn对应第n个内存块。各个内存块对应的地址信息为内存块所映射的虚拟地址相对于所映射的进程在用户空间的基地址的地址偏移,dxn=block_addr_n-base,其中,dxn表示地址偏移,block_addr_n表示第n个内存块映射到目标进程的虚拟地址,base表示目标进程在用户空间的基地址,目标进程可为任一进程。
步骤404,在用户空间的第一进程从用户空间提供的消息内存池中申请内存空间,并将通信消息写入内存空间。
步骤404的描述可参考上述实施例中步骤210的相关描述,在此不再赘述。
在一些实施例中,第一进程从用户空间提供的消息内存池中申请内存空间后,可从消息内存池的内存块队列中读取该内存空间对应的地址信息,该地址信息包括内存空间与第一进程对应的虚拟地址相对于第一进程在用户空间中的第一基地址的目标地址偏移,进一步地,该地址信息可包括内存空间包含的各个内存块相对于第一进程在用户空间中的第一基地址的目标地址偏移。
内存空间与第一进程对应的虚拟地址可指的是内存空间映射到第一进程的用户空间的虚拟地址。第一进程可根据第一基地址及该目标地址偏移确定内存空间映射到第一进程的用户空间的虚拟地址,并基于与预留的物理内存的映射关系,根据该内存空间映射到第一进程的用户空间的虚拟地址确定内存空间的物理地址,并根据该物理地址将通信消息写入内存空间。
例如,内存空间对应的地址信息为地址偏移4byte,进程A在用户空间的基地址为1234,则内存空间映射到进程A的用户空间的虚拟地址为1234+4,预留的物理内存的物理基地址为4,基于进程A与预留的物理内存的映射关系,可确定内存空间的物理地址为4+4,则可根据该物理地址将通信消息写入内存空间。
步骤406,第一进程将内存空间对应的地址信息,写入与用户空间中的第二进程之间的通信管道中,该地址信息包括内存空间与第一进程对应的虚拟地址相对于第一进程在用户空间中的第一基地址的目标地址偏移。
步骤408,第二进程从通信管道中获取该地址信息,根据目标地址偏移,以及第二进程在用户空间中的第二基地址,确定内存空间与第二进程对应的虚拟地址。
内存空间与第二进程对应的虚拟地址可指的是内存空间映射到第二进程的用户空间的虚拟地址。
第一进程将内存空间对应的地址信息写入与第二进程的通信管道中后,第二进程可从该通信管道中获取该地址信息。由于消息内存池中的各个内存块相对于不同进程在用户空间的基地址的地址偏移相同,即内存地址与第一进程对应的虚拟地址相对于第一进程在用户空间中的第一基地址的目标地址偏移,和内存地址与第二进程对应的虚拟地址相对于第二进程在用户空间中的第二基地址的目标地址偏移相同,因此,第二进程可根据该目标地址偏移,以及第二进程在用户空间中的第二基地址,确定内存空间映射到第二进程的用户空间的虚拟地址。
步骤410,第二进程根据内存空间与第二进程对应的虚拟地址访问内存空间,并从内存空间读取通信消息。
第二进程可基于与预留的物理内存的映射关系,根据该内存空间映射到第二进程的用户空间的虚拟地址确定内存空间的物理地址,并根据该物理地址从内存空间读取通信消息。
例如,内存空间对应的地址信息为地址偏移4byte,进程B在用户空间的基地址为5678,则内存空间映射到进程B的用户空间的虚拟地址为5678+4,预留的物理内存的物理基地址为4,基于进程B与预留的物理内存的映射关系,可确定内存空间的物理地址为4+4,则可根据该物理地址从内存空间读取通信消息。
在本申请实施例中,消息内存池中的内存块队列存储的是内存块相对于映射的进程的用户空间的基地址的地址偏移,方便进行管理,提高了进程间通信的稳定性。
如图6所示,在另一个实施例中,提供一种进程间的通信方法,可应用于上述的电子设备,该方法可包括以下步骤:
步骤602,在用户空间的一个或多个进程,将预留的物理内存分别映射到各个进程在用户空间中的空间地址,并建立一个或多个消息内存池。
步骤602的描述可参考上述各实施例中的相关描述,在此不再重复赘述。
步骤604,创建用户空间中的第一进程与第二进程之间的环形的通信管道。
可在用户空间中创建第一进程与第二进程之间的环形的通信管道,该通信管道可以是一个环形的缓存空间,环形的缓存空间是一个头尾相连的缓冲区,用于作为第一进程与第二进程之间进行通信的载体。在本申请实施例中,环形的通信管道可用于作为存储通信消息的内存空间的地址信息的载体,利用指针的形式进行第一进程与第二进程之间的通信,而不直接作为通信消息的载体,可提高通信效率。
需要说明的是,步骤604也可以是在步骤602之前执行,或者是与步骤602同时执行,本申请实施例对步骤602及步骤604的先后执行顺序不作限定。
步骤606,在用户空间的第一进程从用户空间提供的消息内存池中申请内存空间,并将通信消息写入内存空间。
步骤606的描述可参考上述各实施例中的相关描述,在此不再重复赘述。
步骤608,若第一进程确定通信管道中当前存在剩余空间,则确定待写入的剩余空间,并获取待写入的剩余空间对应的写入位置索引。
步骤610,第一进程根据写入位置索引,将内存空间对应的地址信息写入该待写入的剩余空间。
第一进程可判断通信管道中当前是否存在剩余空间,若通信管道中当前存在剩余空间,则可待写入的剩余空间对应的写入位置索引,该写入位置索引用于指示待写入的剩余空间,第一进程可根据该写入位置索引将内存空间对应的地址信息写入该待写入的剩余空间。若通信管道中当前不存在剩余空间,则第一进程可进入等待状态,并在一定时间段(如10毫秒、14毫秒、15毫秒等,但不限于此)后重新判断通信管道中当前是否存在剩余空间。
在一些实施例中,可设置第一进程重复判断通信管道中是否存在剩余空间的次数阈值,若第一进程重复判断通信管道中是否存在剩余空间的次数阈值的次数达到该次数阈值,通信管道中均不存在剩余空间,则可返回异常信息,该异常信息可用于指示通信管道出现异常。电子设备可将该异常信息记录在日志中,方便后续用户查看日志查询异常;或者也可直接将该异常信息输出,以提示用户进程通信的通信管道出现异常,方便及时对进程通信进行维护。可选地,第一进程也可在首次检测到通信管道中不存在剩余空间,就返回异常信息。
在一些实施例中,第一进程判断通信管道中当前是否存在剩余空间,可包括:第一进程获取通信管道中当前的写位置及当前的读位置,该当前的写位置表示通信管道当前的写入位置,当前的读位置表示通信管道当前的读出位置,并根据该当前的写位置及当前的读位置判断通信管道中当前是否存在剩余空间。若当前的写位置与当前的读位置相等,表示当前通信管道的缓存队列已满,则确定通信管道中当前不存在剩余空间;若当前的写位置与当前的读位置不相等,则可确定通信管道中当前存在剩余空间,进一步地,待写入的剩余空间对应的写入位置索引可为该当前的写位置。
在一些实施例中,可采用CAS(Compare and Swap,比较并替换)原子锁技术解决多个进程并发的问题,以避免多个进程同时访问消息管道时,若出现某个进程访问不到该消息管道会把该进程挂起切出,所带来的开销增加及不稳定的问题。第一进程可获取通信管道中当前的写位置,若第一进程确定通信管道中当前存在剩余空间,则在确定待写入的剩余空间后,第一进程可再次获取通信管道当前的写位置,并判断该当前的写位置是否发生变化(即判断本次获取的写位置与之前获取的写位置是否一致)。若当前的写位置未发生变化,可说明在此过程中没有其它进程往通信管道中写入数据,则第一进程可获取待写入的剩余空间对应的写入位置索引,并将内存空间对应的地址信息写入待写入的剩余空间。
若当前的写位置发生变化,可说明在此过程中有其它进程往通信管道中写入数据,则第一进程可重新获取通信管道中当前的写位置,直至当前的写位置未发生变化,第一进程成功获取到待写入的剩余空间的写入位置索引。
通过CAS原子锁技术可保证第一进程在获取不到通信管道中待写入的剩余空间的写入位置索引时,不会被挂起、切出或从就绪队列从被移除,解决了多进程并发的问题且可保证整体的稳定性。
步骤612,若第二进程确定通信管道中当前存在待读取的数据,则从通信管道中读取内存空间对应的地址信息。
第二进程可实时或定时判断通信管道中当前是否存在待读取的数据,若通信管道中当前存在待读取的数据,则第二进程可从通信管道中读取内存空间对应的地址信息,若通信管道中当前不存在待读取的数据,则第二进程可继续判断通信管道中当前是否存在待读取的数据的步骤。
在一些实施例中,第二进程判断通信管道中当前是否存在待读取的数据,可包括:第二进程获取通信管道中当前的写位置及当前的读位置,并根据该当前的读位置及当前的写位置判断通信管道中当前是否存在待读取的数据。由于通信管道为环形的缓存空间,因此,若通信管道中当前的读位置小于当前的写位置减1,或当前的读位置大于当前的写位置减1,则确定通信管道中当前存在待读取的数据。
图7为一个实施例中通信管道是否存在待读取的数据的示意图。如图7的(a)所示,通信管道中当前的读位置小于当前的写位置减1,存在待读取的数据(填充斜线的块表示存在待读取的数据,未填充斜线的块表示没有数据),当前未读取的数量可为当前的写位置-当前的读位置。如图7的(b)所示,通信管道中当前的读位置大于当前的写位置减1,存在待读取的数据,当前未读取的数量可为通信管道容量-当前的读位置+当前的写位置。如图7的(c)所示,通信管道中当前的读位置与当前的写位置相等,存在待读取的数据,通信管道的环形队列被填满,当前未读取的数量为通信管道容量。如图7的(d)所示,通信管道中当前的读位置等于当前的写位置减1,通信管道的环形队列为空,不存在待读取的数据。
在一些实施例中,可采用CAS原子锁技术解决多个进程并发的问题,第二进程可获取通信管道中当前的读位置,若第二进程确定通信管道中当前存在待读取的数据,且当前的读位置未发生变化,则根据当前的读位置从通信管道中读取内存空间对应的地址信息。
在第二进程确定通信管道中当前存在待读取的数据后,第二进程可再次获取通信管道当前的读位置,并判断该当前的读位置是否发生变化(即判断本次获取的读位置与之前获取的读位置是否一致)。若当前的读位置未发生变化,说明在此过程中没有其它进程从通信管道中读取数据,则第二进程可根据当前的读位置从通信管道中读取内存空间对应的地址信息。若在第二进程确定通信管道中当前存在待读取的数据后,当前的读位置发生变化,说明在此过程中有其它进程从通信管道中读取数据,则第二进程可重新获取通信管道中当前的读位置,直至当前的读位置未发生变化,第二进程根据当前的读位置成功读取到内存空间对应的地址信息。
通过CAS原子锁技术可保证第二进程在读取不到内存空间对应的地址信息时,不会被挂起切出,解决了多进程并发的问题且可保证整体的稳定性。
步骤614,第二进程根据该地址信息从内存空间读取通信消息。
第二进程根据内存空间的地址信息从内存空间读取通信消息的方式可参考上述各实施例中的相关描述,在此不再重复赘述。
作为一种具体实施方式,消息内存池中的各个内存块都维护一个头结点,该头结点记录内存块的必要信息,该头结点可包括内存块规格、内存块所属的消息内存池的标识信息等信息,但不限于此。
在一些实施例中,第二进程读取通信消息后,可将内存空间释放回消息内存池中,以方便该内存空间在下一次进程通信时使用。第二进程从内存空间读取通信消息后,可根据该内存空间包含的内存块所属的消息内存池的标识信息,将内存空间释放回与该标识信息对应的消息内存池中。不同消息内存池可分别对应的不同的标识信息,标识信息可由数字、字母及符号等中一种或多种组成,例如,消息内存池1对应的标识信息为001,消息内存池2对应的标识信息为002,消息内存池3对应的标识信息为003等,但不限于此。通过消息内存池的标识信息,第二进程可准确将内存空间释放回对应的消息内存池,保证准确性。
在本申请实施例中,通过环形的通信管道可实现不同进程之间的数据传递,且进程间的数据传递直接采用指针传递,不需要进行数据拷贝,提高了进程间的通信效率,提高了通信的实时性。此外,利用CAS原子锁技术解决了多进程并发的问题,相较于传统对内存进行锁保护的机制,避免进程访问不到资源被切出所带来的开销及不稳定的问题,提高了进程间通信的稳定性。
如图8所示,在一个实施例中,提供一种进程间的通信装置800,可应用于上述的电子设备,该进程间的通信装置800包括消息写入模块810、地址写入模块820及消息读取模块830。
消息写入模块810,用于在用户空间的第一进程从用户空间提供的消息内存池中申请内存空间,并将通信消息写入内存空间。
地址写入模块820,用于通过第一进程将内存空间对应的地址信息,写入与用户空间中的第二进程之间的通信管道中。
消息读取模块830,用于通过第二进程从通信管道中获取地址信息,并根据地址信息从内存空间读取通信消息。
在本申请实施例中,在整个进程间的通信过程中不需用户态及内核态的相互切换,通信消息不需要从用户空间拷贝到内核空间再从内核空间拷贝到用户空间,无需经过系统调用,能够减少进程间通信时所产生的开销,并提高进程间的通信效率;而且利用消息内存池进行进程间通信时的内存分配管理,可使分配的内存空间更加合理,避免不必要的开销,减少资源浪费。
在一个实施例中,上述的进程间的通信装置800除了包括消息写入模块810、地址写入模块820及消息读取模块830,还包括映射模块。
映射模块,用于在用户空间的一个或多个进程,将预留的物理内存分别映射到各个进程在用户空间中的空间地址,并建立一个或多个消息内存池。
在一个实施例中,消息内存池包括内存池管理头结点及多个具有相同内存块规格的内存块;内存池管理头结点用于描述消息内存池中各个内存块的内存块规格、消息内存池包含的内存块数量及消息内存池对应的内存大小中的一种或多种信息。
在一个实施例中,消息内存池还包括内存块队列,内存块队列中存储有消息内存池中的各个内存块的地址信息,各个内存块的地址信息包括内存块相对于所映射的用户空间的基地址的地址偏移。
在一个实施例中,内存空间的地址信息包括内存空间与第一进程对应的虚拟地址相对于第一进程在用户空间中的第一基地址的目标地址偏移。
消息读取模块830,还用于通过第二进程根据目标地址偏移,以及通过第二进程在用户空间中的第二基地址,确定内存空间与第二进程对应的虚拟地址;通过第二进程根据内存空间与第二进程对应的虚拟地址访问内存空间,并从内存空间读取通信消息。
在本申请实施例中,消息内存池中的内存块队列存储的是内存块相对于映射的进程的用户空间的基地址的地址偏移,方便进行管理,提高了进程间通信的稳定性。
在一个实施例中,上述的进程间的通信装置800除了包括消息写入模块810、地址写入模块820、消息读取模块830及映射模块,还包括管道创建模块。
管道创建模块,用于创建用户空间中的第一进程与第二进程之间的环形的通信管道。
在一个实施例中,地址写入模块820,还用于若第一进程确定通信管道中当前存在剩余空间,则确定待写入的剩余空间,并获取待写入的剩余空间对应的写入位置索引;根据写入位置索引,将内存空间对应的地址信息写入待写入的剩余空间。
在一个实施例中,地址写入模块820,还用于通过第一进程获取通信管道中当前的写位置;若第一进程确定通信管道中当前存在剩余空间,则确定待写入的剩余空间;若当前的写位置未发生变化,则获取待写入的剩余空间对应的写入位置索引;若当前的写位置发生变化,则重新执行第一进程获取通信管道中当前的写位置的步骤,直至当前的写位置未发生变化,第一进程成功获取到待写入的剩余空间的写入位置索引。
消息读取模块830,还用于若第二进程确定通信管道中当前存在待读取的数据,则从通信管道中读取内存空间对应的地址信息。
在一个实施例中,消息读取模块830,还用于通过第二进程获取通信管道中当前的读位置;若第二进程确定通信管道中当前存在待读取的数据,且当前的读位置未发生变化,则根据当前的读位置从通信管道中读取内存空间对应的地址信息。
在一个实施例中,消息读取模块830,还用于根据当前的读位置及通信管道中当前的写位置判断通信管道中当前是否存在待读取的数据;若当前的读位置小于当前的写位置减1,或当前的读位置大于当前的写位置减1,则确定通信管道中当前存在待读取的数据。
在一个实施例中,上述的进程间的通信装置800还包括释放模块。
释放模块,用于通过第二进程将内存空间释放回消息内存池中。
在本申请实施例中,在整个进程间的通信过程中不需用户态及内核态的相互切换,通信消息不需要从用户空间拷贝到内核空间再从内核空间拷贝到用户空间,无需经过系统调用,能够减少进程间通信时所产生的开销,并提高进程间的通信效率;而且利用消息内存池进行进程间通信时的内存分配管理,可使分配的内存空间更加合理,避免不必要的开销,减少资源浪费。
图9为一个实施例中电子设备的结构框图。如图9所示,电子设备900可以包括一个或多个如下部件:处理器910、与处理器910耦合的存储器920,其中存储器920可存储有一个或多个计算机程序,一个或多个计算机程序可以被配置为由一个或多个处理器910执行时实现如上述各实施例描述的方法。
处理器910可以包括一个或者多个处理核。处理器910利用各种接口和线路连接整个电子设备900内的各个部分,通过运行或执行存储在存储器920内的指令、程序、代码集或指令集,以及调用存储在存储器920内的数据,执行电子设备900的各种功能和处理数据。可选地,处理器910可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable LogicArray,PLA)中的至少一种硬件形式来实现。处理器910可集成中央处理器(CentralProcessing Unit,CPU)、图像处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器910中,单独通过一块通信芯片进行实现。
存储器920可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory,ROM)。存储器920可用于存储指令、程序、代码、代码集或指令集。存储器920可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现上述各个方法实施例的指令等。存储数据区还可以存储电子设备900在使用中所创建的数据等。
可以理解地,电子设备900可包括比上述结构框图中更多或更少的结构元件,例如,包括电源模块、物理按键、WiFi(Wireless Fidelity,无线保真)模块、扬声器、蓝牙模块、传感器等,还可在此不进行限定。
本申请实施例公开一种计算机可读存储介质,其存储计算机程序,其中,该计算机程序被处理器执行时实现如上述各实施例所描述的方法。
本申请实施例公开一种计算机程序产品,该计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,且该计算机程序可被处理器执行时实现如上述各实施例描述的方法。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、ROM等。
如此处所使用的对存储器、存储、数据库或其它介质的任何引用可包括非易失性和/或易失性存储器。合适的非易失性存储器可包括ROM、可编程ROM(Programmable ROM,PROM)、可擦除PROM(Erasable PROM,EPROM)、电可擦除PROM(Electrically ErasablePROM,EEPROM)或闪存。易失性存储器可包括随机存取存储器(random access memory,RAM),它用作外部高速缓冲存储器。作为说明而非局限,RAM可为多种形式,诸如静态RAM(Static RAM,SRAM)、动态RAM(Dynamic Random Access Memory,DRAM)、同步DRAM(synchronous DRAM,SDRAM)、双倍数据率SDRAM(Double Data Rate SDRAM,DDR SDRAM)、增强型SDRAM(Enhanced Synchronous DRAM,ESDRAM)、同步链路DRAM(Synchlink DRAM,SLDRAM)、存储器总线直接RAM(Rambus DRAM,RDRAM)及直接存储器总线动态RAM(DirectRambus DRAM,DRDRAM)。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定特征、结构或特性可以以任意适合的方式结合在一个或多个实施例中。本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在本申请的各种实施例中,应理解,上述各过程的序号的大小并不意味着执行顺序的必然先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
在本申请各实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上述集成的单元若以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可获取的存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或者部分,可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干请求用以使得一台计算机设备(可以为个人计算机、服务器或者网络设备等,具体可以是计算机设备中的处理器)执行本申请的各个实施例上述方法的部分或全部步骤。
以上对本申请实施例公开的一种进程间的通信方法、装置、电子设备及存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (15)
1.一种进程间的通信方法,其特征在于,包括:
在用户空间的第一进程从所述用户空间提供的消息内存池中申请内存空间,并将通信消息写入所述内存空间;
所述第一进程将所述内存空间对应的地址信息,写入与所述用户空间中的第二进程之间的通信管道中;
所述第二进程从所述通信管道中获取所述地址信息,并根据所述地址信息从所述内存空间读取所述通信消息。
2.根据权利要求1所述的方法,其特征在于,在所述在用户空间的第一进程从所述用户空间提供的消息内存池中申请内存空间之前,所述方法还包括:
在用户空间的一个或多个进程,将预留的物理内存分别映射到各个所述进程在所述用户空间中的空间地址,并建立一个或多个消息内存池。
3.根据权利要求1或2所述的方法,其特征在于,所述消息内存池包括内存池管理头结点及多个具有相同内存块规格的内存块;所述内存池管理头结点用于描述所述消息内存池中各个内存块的内存块规格、所述消息内存池包含的内存块数量及所述消息内存池对应的内存大小中的一种或多种信息。
4.根据权利要求3所述的方法,其特征在于,所述消息内存池还包括内存块队列,所述内存块队列中存储有所述消息内存池中的各个内存块的地址信息,各个所述内存块的地址信息包括内存块相对于所映射的用户空间的基地址的地址偏移。
5.根据权利要求4所述的方法,其特征在于,所述内存空间的地址信息包括所述内存空间与所述第一进程对应的虚拟地址相对于所述第一进程在所述用户空间中的第一基地址的目标地址偏移;
所述根据所述地址信息从所述内存空间读取所述通信消息,包括:
所述第二进程根据所述目标地址偏移,以及所述第二进程在所述用户空间中的第二基地址,确定所述内存空间与所述第二进程对应的虚拟地址;
所述第二进程根据所述内存空间与所述第二进程对应的虚拟地址访问所述内存空间,并从所述内存空间读取所述通信消息。
6.根据权利要求1或2所述的方法,其特征在于,在所述在用户空间的第一进程从所述用户空间提供的消息内存池中申请内存空间之前,所述方法还包括:
创建用户空间中的第一进程与第二进程之间的环形的通信管道。
7.根据权利要求6所述的方法,其特征在于,所述第一进程将所述内存空间对应的地址信息,写入与所述用户空间中的第二进程之间的通信管道中,包括:
若所述第一进程确定所述通信管道中当前存在剩余空间,则确定待写入的剩余空间,并获取所述待写入的剩余空间对应的写入位置索引;
根据所述写入位置索引,将所述内存空间对应的地址信息写入所述待写入的剩余空间;
所述第二进程从所述通信管道中获取所述地址信息,包括:
若所述第二进程确定所述通信管道中当前存在待读取的数据,则从所述通信管道中读取所述内存空间对应的地址信息。
8.根据权利要求7所述的方法,其特征在于,所述若所述第一进程确定所述通信管道中当前存在剩余空间,则确定待写入的剩余空间,并获取所述待写入的剩余空间对应的写入位置索引,包括:
所述第一进程获取所述通信管道中当前的写位置;
若所述第一进程确定所述通信管道中当前存在剩余空间,则确定待写入的剩余空间;
若所述当前的写位置未发生变化,则获取所述待写入的剩余空间对应的写入位置索引;
若所述当前的写位置发生变化,则重新执行所述第一进程获取所述通信管道中当前的写位置的步骤,直至当前的写位置未发生变化,所述第一进程成功获取到待写入的剩余空间的写入位置索引。
9.根据权利要求7所述的方法,其特征在于,若所述第二进程确定所述通信管道中当前存在待读取的数据,则从所述通信管道中读取所述内存空间对应的地址信息,包括:
所述第二进程获取所述通信管道中当前的读位置;
若所述第二进程确定所述通信管道中当前存在待读取的数据,且所述当前的读位置未发生变化,则根据所述当前的读位置从所述通信管道中读取所述内存空间对应的地址信息。
10.根据权利要求9所述的方法,其特征在于,在所述第二进程获取所述通信管道中当前的读位置之后,所述方法还包括:
根据所述当前的读位置及所述通信管道中当前的写位置判断所述通信管道中当前是否存在待读取的数据;
若所述当前的读位置小于所述当前的写位置减1,或所述当前的读位置大于所述当前的写位置减1,则确定所述通信管道中当前存在待读取的数据。
11.根据权利要求1~2、4~5、7~10任一所述的方法,其特征在于,在所述根据所述地址信息从所述内存空间读取所述通信消息之后,所述方法还包括:
所述第二进程将所述内存空间释放回所述消息内存池中。
12.根据权利要求11所述的方法,其特征在于,所述内存空间包括一个或多个内存块,每个所述内存块维护一个头结点,所述头结点包括对应内存块所属的消息内存池的标识信息;
所述第二进程将所述内存空间释放回所述消息内存池中,包括:
根据所述内存空间中包含的内存块所属的消息内存池的标识信息,将所述内存空间释放回与所述标识信息对应的消息内存池中。
13.一种进程间的通信装置,其特征在于,包括:
消息写入模块,用于在用户空间的第一进程从所述用户空间提供的消息内存池中申请内存空间,并将通信消息写入所述内存空间;
地址写入模块,用于通过所述第一进程将所述内存空间对应的地址信息,写入与所述用户空间中的第二进程之间的通信管道中;
消息读取模块,用于通过所述第二进程从所述通信管道中获取所述地址信息,并根据所述地址信息从所述内存空间读取所述通信消息。
14.一种电子设备,其特征在于,包括存储器及处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器实现如权利要求1~12任一所述的方法。
15.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被计算机设备中的处理器执行时,使得所述处理器实现如权利要求1~12任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210290507.XA CN116841760A (zh) | 2022-03-23 | 2022-03-23 | 进程间的通信方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210290507.XA CN116841760A (zh) | 2022-03-23 | 2022-03-23 | 进程间的通信方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116841760A true CN116841760A (zh) | 2023-10-03 |
Family
ID=88160350
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210290507.XA Pending CN116841760A (zh) | 2022-03-23 | 2022-03-23 | 进程间的通信方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116841760A (zh) |
-
2022
- 2022-03-23 CN CN202210290507.XA patent/CN116841760A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
ES2617303T3 (es) | Técnicas de comunicación entre procesadores en una plataforma informática de múltiples procesadores | |
US20080126762A1 (en) | Methods, systems, and apparatus for object invocation across protection domain boundaries | |
US8943516B2 (en) | Mechanism for optimized intra-die inter-nodelet messaging communication | |
CN102855214B (zh) | 实现数据一致性的方法和一种多核系统 | |
CN111857993B (zh) | 一种内核态调用用户态函数的方法 | |
CN104216862A (zh) | 一种用户进程与系统服务之间的通信方法、装置 | |
US20120102012A1 (en) | Cross-region access method for embedded file system | |
JP2016529568A (ja) | 複数のハイパーバイザを実行するシステムおよび方法 | |
US20230168953A1 (en) | Inter-process communication method and apparatus | |
CN112506823A (zh) | 一种fpga数据读写方法、装置、设备及可读存储介质 | |
CN111708738A (zh) | 实现hadoop文件系统hdfs与对象存储s3数据互访方法及系统 | |
CN110716845A (zh) | 一种Android系统的日志信息读取的方法 | |
CN111679923A (zh) | 实时通信方法和系统 | |
CN113867979A (zh) | 异构多核处理器数据通信方法、装置、设备及介质 | |
WO2022237419A1 (zh) | 任务执行方法、装置及存储介质 | |
CN107277022B (zh) | 进程标记方法及装置 | |
CN112559210A (zh) | 一种基于rtx实时系统的共享资源读写互斥方法 | |
CN115827506A (zh) | 数据写入方法、数据读取方法、装置、处理核和处理器 | |
CN112256460A (zh) | 进程间通信方法、装置、电子设备及计算机可读存储介质 | |
CN108958903B (zh) | 嵌入式多核中央处理器任务调度方法与装置 | |
JPH08161283A (ja) | 複数プロセツサシステム | |
CN108171862B (zh) | 一种发号方法及发号器 | |
CN116841760A (zh) | 进程间的通信方法、装置、电子设备及存储介质 | |
CN111310638A (zh) | 一种数据处理方法、装置及计算机可读存储介质 | |
JP6249117B1 (ja) | 情報処理装置 |
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 |