CN112749025A - 基于共享内存的数据分发方法及装置 - Google Patents
基于共享内存的数据分发方法及装置 Download PDFInfo
- Publication number
- CN112749025A CN112749025A CN202011615953.0A CN202011615953A CN112749025A CN 112749025 A CN112749025 A CN 112749025A CN 202011615953 A CN202011615953 A CN 202011615953A CN 112749025 A CN112749025 A CN 112749025A
- Authority
- CN
- China
- Prior art keywords
- data
- memory
- memory space
- application process
- space corresponding
- 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 255
- 230000008569 process Effects 0.000 claims abstract description 171
- 238000004590 computer program Methods 0.000 claims description 15
- 230000005540 biological transmission Effects 0.000 abstract description 15
- 230000007717 exclusion Effects 0.000 description 11
- 238000004891 communication Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 230000002159 abnormal effect Effects 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 3
- 230000005059 dormancy Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000000977 initiatory effect Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000007958 sleep Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
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/544—Buffers; Shared memory; Pipes
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例涉及计算机技术领域,提供了一种基于共享内存的数据分发方法及装置,所述方法包括:通过第一应用进程,根据发布数据的种类标识,将发布数据写入种类标识对应的内存空间;通过第二应用进程,根据种类标识,从种类标识对应的内存空间获取发布数据;其中,各种类标识对应的内存空间相互独立。本申请实施例提供的基于共享内存的数据分发方法及装置,通过第一应用进程将发布数据写入发布数据的种类标识对应的内存空间,通过第二应用进程从该种类标识对应的内存空间获取发布数据,能大大提高数据传输的效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种基于共享内存的数据分发方法及装置。
背景技术
共享内存的方式,常用于进行进程间的数据分发。例如,对于Linux系统,进程节点间基于Linux IPC共享内存实现的数据分发。
当有多个进程节点相互之间进行数据的读写通信时,对共享数据的互斥保护机制变得很复杂,引入大量的信号量和进程互斥锁,很容易引起死锁或其他异常情况。
不同进程节点访问共享数据时,获取互斥保护锁时,会引起进程或线程休眠和唤醒调度,影响数据通信的实时性,也会占用系统资源。当通信频率很高时,反复的休眠和唤醒调度会占用系统大量的运行时间。
综上,现有数据分发方法存在数据传输的效率低,系统资源浪费严重等不足。
发明内容
本申请提供一种基于共享内存的数据分发方法及装置,以实现更高效的数据传输。
本申请提供一种基于共享内存的数据分发方法,包括:
通过第一应用进程,根据发布数据的种类标识,将所述发布数据写入所述种类标识对应的内存空间;
通过第二应用进程,根据所述种类标识,从所述种类标识对应的内存空间获取所述发布数据;
其中,各种类标识对应的内存空间相互独立。
根据本申请提供的一种基于共享内存的数据分发方法,所述通过第一应用进程,根据发布数据的种类标识,将所述发布数据写入所述种类标识对应的内存空间的具体步骤包括:
通过所述第一应用进程,基于所述种类标识对应的内存空间的读写自旋锁,将所述发布数据写入所述种类标识对应的内存空间。
根据本申请提供的一种基于共享内存的数据分发方法,所述通过第二应用进程,根据所述种类标识,从所述种类标识对应的内存空间获取所述发布数据的具体步骤包括:
若判断获知所述发布数据被写入所述种类标识对应的内存空间,则通过所述第二应用进程,基于所述种类标识对应的内存空间的读写自旋锁,从所述种类标识对应的内存空间读取所述发布数据。
根据本申请提供的一种基于共享内存的数据分发方法,所述通过第一应用进程,根据发布数据的种类标识,将所述发布数据写入所述种类标识对应的内存空间之前,还包括:
将物理内存划分为多个独立的内存空间,将每一种类标识分别与一个内存空间对应。
根据本申请提供的一种基于共享内存的数据分发方法,所述将物理内存划分为多个独立的内存空间的具体步骤包括:
将物理内存划分为多个独立的内存空间,使得所述多个独立的内存空间的地址为线性地址。
根据本申请提供的一种基于共享内存的数据分发方法,所述将物理内存划分为多个独立的内存空间,将每一种类标识分别与一个内存空间对应,与所述通过第一应用进程,根据发布数据的种类标识,将所述发布数据写入所述种类标识对应的内存空间之间,还包括:
响应于通过所述第一应用进程发起的发布数据注册请求,根据所述发布数据注册请求携带的所述发布数据的种类,确定所述发布数据的种类标识并将所述发布数据的种类标识返回所述第一应用进程。
根据本申请提供的一种基于共享内存的数据分发方法,所述将物理内存划分为多个独立的内存空间,将每一种类标识分别与一个内存空间对应,与所述通过第二应用进程,根据所述种类标识,从所述种类标识对应的内存空间获取所述发布数据之间,还包括:
响应于通过所述第二应用进程发起的订阅数据注册请求,根据所述订阅数据注册请求携带的订阅数据的种类,确定所述订阅数据的种类标识并将所述订阅数据的种类标识返回所述第二应用进程;
其中,所述订阅数据的种类与所述发布数据的种类相同。
本申请还提供一种基于共享内存的数据分发装置,包括:
数据发布模块,用于通过第一应用进程,根据发布数据的种类标识,将所述发布数据写入所述种类标识对应的内存空间;
数据订阅模块,用于通过第二应用进程,根据所述种类标识,从所述种类标识对应的内存空间获取所述发布数据;
其中,各种类标识对应的内存空间相互独立。
根据本申请提供的一种基于共享内存的数据分发装置,所述数据发布模块,具体用于通过所述第一应用进程,基于所述种类标识对应的内存空间的读写自旋锁,将所述发布数据写入所述种类标识对应的内存空间。
根据本申请提供的一种基于共享内存的数据分发装置,所述数据订阅模块,具体用于若判断获知所述发布数据被写入所述种类标识对应的内存空间,则通过所述第二应用进程,基于所述种类标识对应的内存空间的读写自旋锁,从所述种类标识对应的内存空间读取所述发布数据。
本申请还提供一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述任一种所述数据分发方法的步骤。
本申请还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述数据分发方法的步骤。
本申请提供的基于共享内存的数据分发方法及装置,通过第一应用进程将发布数据写入发布数据的种类标识对应的内存空间,通过第二应用进程从该种类标识对应的内存空间获取发布数据,能大大提高数据传输的效率。
附图说明
为了更清楚地说明本申请或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请提供的基于共享内存的数据分发方法的流程示意图;
图2是本申请提供的基于共享内存的数据分发方法的流程示意图;
图3是本申请提供的基于共享内存的数据分发方法的流程示意图;
图4是本申请提供的基于共享内存的数据分发方法的流程示意图;
图5是本申请提供的基于共享内存的数据分发装置的结构示意图;
图6是本申请提供的基于共享内存的数据分发装置的结构示意图;
图7是本申请提供的电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请实施例的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请实施例和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请实施例的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性,且不涉及顺序。
在本申请实施例的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本申请实施例中的具体含义。
为了克服现有技术的上述问题,本申请提供一种基于共享内存的数据分发方法及装置,其构思是,改变了基于IPC共享内存方法,由两个应用进程(数据的发布进程和数据的读取进程)进行内存共享实现数据分发的方式,而基于所分发数据的种类标识进行内存共享,通过数据的发布进程将数据写入与该数据的种类标识对应的内存空间,并由数据的读取进程根据种类标识,从种类标识对应的内存空间中读取数据,可以大大减少引起死锁或其他异常情况,数据分发效率更高。
图1是本申请提供的一种基于共享内存的数据分发方法的流程示意图。下面结合图1描述本申请实施例的基于共享内存的数据分发方法。如图1所示,该方法包括:步骤S101、通过第一应用进程,根据发布数据的种类标识,将发布数据写入种类标识对应的内存空间。
其中,各种类标识对应的内存空间相互独立。
具体地,本申请实施例提供的基于共享内存的数据分发方法,适用于基于支持共享内存的操作系统进行数据分发。优选地,本申请实施例提供的基于共享内存的数据分发方法,适用于基于Linux系统进行数据分发。
种类标识,用于标识数据的种类。
数据的种类DataTopic,可以是不同目标的不同参数数据。每一种DataTopic对应一种独立的数据。
例如,目标A的速度、目标A的位置、目标B的速度和目标C的高度,均为独立的数据,因而目标A的速度、目标A的位置、目标B的速度和目标C的高度可以分别作为一种。
种类标识,是数据的种类的编号。每一种类,具有唯一的种类标识。
由于每一种DataTopic对应一种独立的数据,因而每一种类标识对应一种独立的数据。
第一应用进程,为某一应用程序的一个进程,是数据的发布进程。
发布数据,为需要通过第一应用进程分发(即分布)的数据。
基于第一应用进程获取发布数据之后,根据发布数据的DataTopic,确定发布数据的种类标识(例如SpeedA)及发布数据的种类标识对应的内存空间。
确定发布数据的种类标识对应的内存空间之后,可以通过第一应用进程将该发布数据写入该发布数据的种类标识对应的内存空间。
需要说明的是,每一种类标识分别对应一个内存空间,各种类标识对应的内存空间相互独立,因而,每一种类的数据有自己独立的存储空间。
需要说明的是,对于Linux系统,各内存空间,可以通过mmap将内存空间映射到Linux应用层,Linux应用程序可以Linux应用层通过直接对内存空间进行读操作或写操作。
Mmap是一种内存映射文件的方法,可以将一个文件或者其它对象映射进内存。
步骤S102、通过第二应用进程,根据种类标识,从种类标识对应的内存空间获取发布数据。
具体地,第二应用进程,为某一应用程序的一个进程,是数据的订阅进程。
第二应用进程根据需要获取的数据的DataTopic,确定需要获取的数据的种类标识(例如SpeedA)及种类标识SpeedA对应的内存空间。
确定种类标识SpeedA对应的内存空间之后,可以通过第二应用进程从种类标识SpeedA对应的内存空间中,读取通过第一应用进程写入种类标识SpeedA对应的内存空间的发布数据。
需要说明的是,本申请实施例提供的数据分发方法,可以用于自动驾驶或机器人通信等场景。
例如,自动驾驶场景中,需要将各数据采集进程采集的车辆的速度、位置、车内的温度等参数分发至自动驾驶控制程序的各个进程,通过某一数据采集进程将采集的种类标识为Loc的位置数据,写入种类标识Loc对应的内存空间之后,可以通过自动驾驶控制程序的某一进程根据种类标识Loc,从种类标识Loc对应的内存空间中获取上述位置数据,实现位置数据的分发。
需要说明的是,传统的基于Linux IPC共享内存的方法,需要对可能产生数据读写冲突的每两个进程引入信号量和进程互斥锁,对于多个进程进行数据的读写通信的场景,则需要引入大量的信号量和进程互斥锁,以实现对共享数据的保护,容易引起死锁或其他异常情况,数据传输的效率也比较低。而对于多个进程进行数据的读写通信的场景,根据本申请实施例提供的数据分发方法,虽然也是一台主机的进程间共享内存,但不需要对可能产生数据读写冲突的每两个进程引入信号量和进程互斥锁,而只需要对每一种类标识对应的内存空间进行共享保护,以避免数据的读写冲突,从而大大减少了信号量和进程互斥锁,数据传输的效率大大提高,将应用进程从共享数据的保护机制细节中解脱出来,大大降低了应用进程的编程难度,共享数据的保护与应用进程独立,大大减少死锁及其他异常情况。
例如,10个发布进程和12个订阅进程,每一发布进程与每一订阅进程均需要进行通信,涉及的数据种类有20种,传统的基于Linux IPC共享内存的方法需要对至少120个进程组(可能产生数据读写冲突的每两个进程)引入信号量和进程互斥锁,若考虑数据种类,引入的信号量和进程互斥锁的数量更多,而本申请实施例提供的数据分发方法,仅需要对20种数据对应的内存空间进行共享保护,数据传输的效率大大提高。
可以理解的是,各DataTopic的通道相互独立,可以通过DataTopic的列表记录各第一应用进程和第二应用进程。
本申请实施例通过第一应用进程将发布数据写入发布数据的种类标识对应的内存空间,通过第二应用进程从该种类标识对应的内存空间获取发布数据,能大大提高数据传输的效率。
基于上述各实施例的内容,通过第一应用进程,根据发布数据的种类标识,将发布数据写入种类标识对应的内存空间的具体步骤包括:通过第一应用进程,基于种类标识对应的内存空间的读写自旋锁,将发布数据写入种类标识对应的内存空间。
具体地,对每一内存空间的共享保护,可以采用读写自旋锁。
每一DataTopic对应的内存空间有自己的读写锁rw_lock。读写锁,用于实现对写操作的互斥和对读操作的共享。
读写锁,可以为读写自旋锁。基于读写自旋锁,不会引起休眠和调度,适用于执行频率高、执行时间短的场景。
自旋锁(Spinlock)是一种常用的互斥(Mutual Exclusion)同步原语(Synchronization Primitive),试图进入临界区(Critical Section)的线程使用忙等待(Busy Waiting)的方式检测锁的状态,若锁未被持有则尝试获取。这种忙等待的做法无谓地消耗了处理器资源,故而只适用于临界区非常短小的代码片段,例如Linux内核的中断处理函数。
由于互斥的特点,使用自旋锁的代码毫无线程并发性可言,多处理器系统的性能受到限制。通过观察线程在临界区的访问行为,发现有些线程只是简单地读取信息,并不修改任何东西,那么允许它们同时进入临界区不会有任何危险,反而能大大提高系统的并发性。这种将线程区分为读者和写者、多个读者允许同时访问共享资源、申请线程在等待期内依然使用忙等待方式的锁,称之为读写自旋锁(Reader-Writer Spinlock)。
第一应用进程确定发布数据的种类标识对应的内存空间之后,向该内存空间的读写自旋锁提交“写者申请”,请求对该内存空间进行写操作。
若该读写自旋锁的状态为“未被持有”,则该读写自旋锁执行第一应用进程提交的“写者申请”操作,可以通过第一应用进程将发布数据写入该发布数据的种类标识对应的内存空间,并将该读写自旋锁的状态修改为“写者持有”。
写入完成后,该读写自旋锁执行“写者释放”操作,将该读写自旋锁的状态修改为“未被持有”。
若该读写自旋锁的状态为“写者持有”或“读者持有”,则第一应用进程进入忙循环(即忙等待),直至该读写自旋锁处理第一应用进程提交的“写者申请”。
本申请实施例通过第一应用进程,基于种类标识对应的内存空间的读写自旋锁,将发布数据写入种类标识对应的内存空间,能在实现保护共享数据的前提下,不会引起进程或线程调度或休眠,能提高数据传输的效率,能节省系统资源。
基于上述各实施例的内容,通过第二应用进程,根据种类标识,从种类标识对应的内存空间获取发布数据的具体步骤包括:若判断获知发布数据被写入种类标识对应的内存空间,则通过第二应用进程,基于种类标识对应的内存空间的读写自旋锁,从种类标识对应的内存空间读取发布数据。
具体地,第二应用进程确定需要获取的数据的种类标识对应的内存空间之后,判断是否有发布数据被写入该内存空间。
可以通过监听、轮询或异步等待等方式,判断是否有发布数据被写入该内存空间。
若有发布数据被写入该内存空间,第二应用进程向该内存空间的读写自旋锁提交“读者申请”,请求对该内存空间进行读操作。
需要说明的是,需要获取的数据的种类标识,与上述发布数据的种类标识相同。
若该读写自旋锁的状态为“未被持有”,则该读写自旋锁执行第二应用进程提交的“读者申请”操作,可以通过第二应用进程从内存空间中读取出发布数据,并将该读写自旋锁的状态修改为“读者持有”。
若该读写自旋锁的状态为“写者持有”,则该读写自旋锁执行第二应用进程提交的“读者申请”操作,可以通过第二应用进程从内存空间中读取出发布数据,并保持该读写自旋锁的状态为“读者持有”。
读取完成后,若还有其他进程对该内存空间进行读操作,则该读写自旋锁执行上述其他进程提交的“读者申请”操作,保持该读写自旋锁的状态为“读者持有”;若没有其他进程对该内存空间进行读操作,则该读写自旋锁执行“读者释放”操作,将该读写自旋锁的状态修改为“未被持有”。
若该读写自旋锁的状态为“写者持有”,则第二应用进程进入忙循环(即忙等待),直至该读写自旋锁处理第二应用进程提交的“读者申请”。
本申请实施例通过第二应用进程,基于发布数据的种类标识对应的内存空间的读写自旋锁,从发布数据的种类标识对应的内存空间读取发布数据,能在实现保护共享数据的前提下,不会引起进程或线程调度或休眠,能提高数据传输的效率,能节省系统资源。
图2是本申请提供的基于共享内存的数据分发方法的流程示意图。基于上述各实施例的内容,如图2所示,步骤S101、通过第一应用进程,根据发布数据的种类标识,将发布数据写入种类标识对应的内存空间之前,还包括:步骤S001、将物理内存划分为多个独立的内存空间,将每一种类标识分别与一个内存空间对应。
具体地,对于Linux系统,可以通过kmalloc将物理内存划分为多个独立的内存空间,并分配给各种类标识DataTopic,使得每一种类标识DataTopic对应一个内存空间。
Kmalloc是计算机语言的一种函数名,用于分配内存。
函数kmalloc()可以分配连续的物理地址,用于小内存分配。
对于Windows系统,可以通过ExAllocatePool将物理内存划分为多个独立的内存空间,并分配给各种类标识DataTopic,使得每一种类标识DataTopic对应一个内存空间。
本申请实施例通过将物理内存划分为多个独立的内存空间,将每一种类标识分别与一个内存空间对应,从而能基于数据的种类标识对应的内存空间进行数据分发,能大大提高数据传输的效率。
基于上述各实施例的内容,将物理内存划分为多个独立的内存空间的具体步骤包括:将物理内存划分为多个独立的内存空间,使得多个独立的内存空间的地址为线性地址。
具体地,可以根据物理内存的地址范围,将物理内存划分为多个独立的内存空间,任意两个相邻的内存空间的地址连续,不出现不属于任一内存空间的地址,保证多个独立的内存空间的地址为线性地址,从而提高访问物理内存的效率。
即对于任一内存空间,该内存空间起始地址的上一地址和该内存空间结束地址的下一地址,均被划分至其他内存空间。
本申请实施例通过将物理内存划分为地址连续的多个独立的内存空间,能提高进行访问物理内存的效率,从而能提高数据传输的效率。
图3是本申请提供的基于共享内存的数据分发方法的流程示意图。基于上述各实施例的内容,如图3所示,步骤S001、将物理内存划分为多个独立的内存空间,将每一种类标识分别与一个内存空间对应,与步骤S101、通过第一应用进程,根据发布数据的种类标识,将发布数据写入种类标识对应的内存空间之间,还包括:步骤S002、响应于通过第一应用进程发起的发布数据注册请求,根据发布数据注册请求携带的发布数据的种类,确定发布数据的种类标识并将发布数据的种类标识返回第一应用进程。
具体地,通过第一应用进程写入发布数据之前,先对通过第一应用进程发布的发布数据的种类DataTopic进行注册。
注册的具体过程包括:
通过第一应用进程发起发布数据注册请求,注册发布数据的DataTopic;发布数据注册请求,携带有发布数据的DataTopic。
接收发布数据注册请求之后,根据发布数据的DataTopic,确定发布数据的种类标识(例如SpeedA),并将该种类标识返回第一应用进程。
第一应用进程可以根据发布数据的种类标识和映射到操作系统(例如Linux或Windows)应用层的各内存空间,对该种类标识对应的内存空间进行写操作。
可以通过对应用层提供统一的接口,满足第一应用进程的需求。
通过对应用层对第一应用进程提供的接口可以包括:
RegisterPub(dataTopic);//注册要发布的数据Topic
Publish(dataTopic);//对外发布数据Topic
本申请实施例通过响应发布数据注册请求,确定发布数据的种类标识并将发布数据的种类标识返回第一应用进程,从而能基于发布数据的种类标识对应的内存空间实现数据分发,能大大提高数据传输的效率。
图4是本申请提供的基于共享内存的数据分发方法的流程示意图。基于上述各实施例的内容,如图4所示,步骤S001、将物理内存划分为多个独立的内存空间,将每一种类标识分别与一个内存空间对应,与步骤S102、通过第二应用进程,根据种类标识,从种类标识对应的内存空间获取发布数据之间,还包括:步骤S003、响应于通过第二应用进程发起的订阅数据注册请求,根据订阅数据注册请求携带的订阅数据的种类,确定订阅数据的种类标识并将订阅数据的种类标识返回第二应用进程;其中,订阅数据的种类与发布数据的种类相同。
具体地,通过第二应用进程写入发布数据之前,先对通过第二应用进程获取的订阅数据的种类DataTopic进行注册。
订阅数据,为需要通过第二应用进程获取的数据。
注册的具体过程包括:
通过第二应用进程发起订阅数据注册请求,注册订阅数据的DataTopic;订阅数据注册请求,携带有订阅数据的DataTopic。
接收订阅数据注册请求之后,根据订阅数据的DataTopic,确定订阅数据的种类标识(例如SpeedA),并将该种类标识返回第二应用进程。
第二应用进程可以根据发布数据的种类标识和映射到操作系统(例如Linux或Windows)应用层的各内存空间,对该种类标识对应的内存空间进行读操作。
可以通过对应用层提供统一的接口,满足第二应用进程的需求。
通过对应用层对第二应用进程提供的接口可以包括:
RegisterSub(dataTopic);//注册要订阅的数据Topic
ReadSub(dataTopic);//读取订阅的数据Topic
dataTopicWaitTopic();//异步等待到来的数据Topic
可以理解的是,对于任一第一应用进程和任二第一应用进程,若通过该第一应用进程发布的发布数据的种类和通过该第二应用进程订阅的订阅数据的种类相同,则可以通过该第二应用进程获取该第一应用进程发布的发布数据。
需要说明的是,步骤S003与步骤S002之间不存在特定的时序关系,步骤S003与步骤S101之间也不存在特定的时序关系。以步骤S101为例,图4示出步骤S003在步骤S101之前,在本申请的其他实施例中,步骤S003也可以在步骤S101之后,也可以与步骤S101同时执行。
本申请实施例通过响应订阅数据注册请求,确定订阅数据的种类标识并将订阅数据的种类标识返回第二应用进程,从而能基于发布数据的种类标识对应的内存空间实现数据分发,能大大提高数据传输的效率。
下面对本申请提供的数据分发装置进行描述,下文描述的数据分发装置与上文描述的数据分发方法可相互对应参照。
图5是根据本申请实施例提供的基于共享内存的数据分发装置的结构示意图。基于上述各实施例的内容,如图5所示,该装置包括数据发布模块501和数据订阅模块502,其中:
数据发布模块501,用于通过第一应用进程,根据发布数据的种类标识,将发布数据写入种类标识对应的内存空间;
数据订阅模块502,用于通过第二应用进程,根据种类标识,从种类标识对应的内存空间获取发布数据;
其中,各种类标识对应的内存空间相互独立。
具体地,数据发布模块501与数据订阅模块502电连接。
数据发布模块501基于第一应用进程获取发布数据之后,根据发布数据的DataTopic,确定发布数据的种类标识及发布数据的种类标识对应的内存空间;通过第一应用进程将该发布数据写入该发布数据的种类标识对应的内存空间。
数据订阅模块502根据需要获取的数据的DataTopic,确定需要获取的数据的种类标识及该种类标识对应的内存空间;通过第二应用进程从该种类标识对应的内存空间中,读取通过第一应用进程写入该种类标识对应的内存空间的发布数据。
数据发布模块501,具体用于通过第一应用进程,基于种类标识对应的内存空间的读写自旋锁,将发布数据写入种类标识对应的内存空间。
数据订阅模块502,具体用于若判断获知发布数据被写入种类标识对应的内存空间,则通过第二应用进程,基于种类标识对应的内存空间的读写自旋锁,从种类标识对应的内存空间读取发布数据。
图6是本申请提供的基于共享内存的数据分发装置的结构示意图。需要说明的是,如图6所示,该数据分发装置还可以包括分发管理模块601。
分发管理模块601,用于将物理内存划分为多个独立的内存空间,将每一种类标识分别与一个内存空间对应。
分发管理模块601,具体用于将物理内存划分为多个独立的内存空间,使得多个独立的内存空间的地址为线性地址。
分发管理模块601,还用于响应于通过第一应用进程发起的发布数据注册请求,根据发布数据注册请求携带的发布数据的种类,确定发布数据的种类标识并将发布数据的种类标识返回第一应用进程。
分发管理模块601,还用于响应于通过第二应用进程发起的订阅数据注册请求,根据订阅数据注册请求携带的订阅数据的种类,确定订阅数据的种类标识并将订阅数据的种类标识返回第二应用进程;其中,订阅数据的种类与发布数据的种类相同。
本申请实施例提供的数据分发装置,用于执行本申请上述各实施例提供的数据分发方法,该数据分发装置包括的各模块实现相应功能的具体方法和流程详见上述数据分发方法的实施例,此处不再赘述。
该数据分发装置用于前述各实施例的数据分发方法。因此,在前述各实施例中的数据分发方法中的描述和定义,可以用于本申请实施例中各执行模块的理解。
本申请实施例通过第一应用进程将发布数据写入发布数据的种类标识对应的内存空间,通过第二应用进程从该种类标识对应的内存空间获取发布数据,能大大提高数据传输的效率。
图7示例了一种电子设备的实体结构示意图,如图7所示,该电子设备可以包括:处理器(processor)701、存储器(memory)702和总线703;其中,处理器701和存储器702通过总线703完成相互间的通信;处理器701用于调用存储在存储器702中并可在处理器701上运行的计算机程序指令,以执行上述各方法实施例提供的数据分发方法,该方法包括:通过第一应用进程,根据发布数据的种类标识,将发布数据写入种类标识对应的内存空间;通过第二应用进程,根据种类标识,从种类标识对应的内存空间获取发布数据;其中,各种类标识对应的内存空间相互独立。
此外,上述的存储器702中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请实施例提供的电子设备中的处理器701可以调用存储器702中的逻辑指令,其具体的实施方式与前述方法的实施例中记载的实施方式一致,且可以达到相同的有益效果,此处不再赘述。
另一方面,本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的数据分发方法,该方法包括:通过第一应用进程,根据发布数据的种类标识,将发布数据写入种类标识对应的内存空间;通过第二应用进程,根据种类标识,从种类标识对应的内存空间获取发布数据;其中,各种类标识对应的内存空间相互独立。
本申请实施例提供的计算机程序产品被执行时,实现上述数据分发方法,其具体的实施方式与前述方法的实施例中记载的实施方式一致,且可以达到相同的有益效果,此处不再赘述。
又一方面,本申请实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的数据分发方法,该方法包括:通过第一应用进程,根据发布数据的种类标识,将发布数据写入种类标识对应的内存空间;通过第二应用进程,根据种类标识,从种类标识对应的内存空间获取发布数据;其中,各种类标识对应的内存空间相互独立。
本申请实施例提供的非暂态计算机可读存储介质上存储的计算机程序被执行时,实现上述数据分发方法,其具体的实施方式与前述方法的实施例中记载的实施方式一致,且可以达到相同的有益效果,此处不再赘述。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (12)
1.一种基于共享内存的数据分发方法,其特征在于,包括:
通过第一应用进程,根据发布数据的种类标识,将所述发布数据写入所述种类标识对应的内存空间;
通过第二应用进程,根据所述种类标识,从所述种类标识对应的内存空间获取所述发布数据;
其中,各种类标识对应的内存空间相互独立。
2.根据权利要求1所述的基于共享内存的数据分发方法,其特征在于,所述通过第一应用进程,根据发布数据的种类标识,将所述发布数据写入所述种类标识对应的内存空间的具体步骤包括:
通过所述第一应用进程,基于所述种类标识对应的内存空间的读写自旋锁,将所述发布数据写入所述种类标识对应的内存空间。
3.根据权利要求1所述的基于共享内存的数据分发方法,其特征在于,所述通过第二应用进程,根据所述种类标识,从所述种类标识对应的内存空间获取所述发布数据的具体步骤包括:
若判断获知所述发布数据被写入所述种类标识对应的内存空间,则通过所述第二应用进程,基于所述种类标识对应的内存空间的读写自旋锁,从所述种类标识对应的内存空间读取所述发布数据。
4.根据权利要求1至3任一所述的基于共享内存的数据分发方法,其特征在于,所述通过第一应用进程,根据发布数据的种类标识,将所述发布数据写入所述种类标识对应的内存空间之前,还包括:
将物理内存划分为多个独立的内存空间,将每一种类标识分别与一个内存空间对应。
5.根据权利要求4所述的基于共享内存的数据分发方法,其特征在于,所述将物理内存划分为多个独立的内存空间的具体步骤包括:
将物理内存划分为多个独立的内存空间,使得所述多个独立的内存空间的地址为线性地址。
6.根据权利要求5所述的基于共享内存的数据分发方法,其特征在于,所述将物理内存划分为多个独立的内存空间,将每一种类标识分别与一个内存空间对应,与所述通过第一应用进程,根据发布数据的种类标识,将所述发布数据写入所述种类标识对应的内存空间之间,还包括:
响应于通过所述第一应用进程发起的发布数据注册请求,根据所述发布数据注册请求携带的所述发布数据的种类,确定所述发布数据的种类标识并将所述发布数据的种类标识返回所述第一应用进程。
7.根据权利要求5所述的基于共享内存的数据分发方法,其特征在于,所述将物理内存划分为多个独立的内存空间,将每一种类标识分别与一个内存空间对应,与所述通过第二应用进程,根据所述种类标识,从所述种类标识对应的内存空间获取所述发布数据之间,还包括:
响应于通过所述第二应用进程发起的订阅数据注册请求,根据所述订阅数据注册请求携带的订阅数据的种类,确定所述订阅数据的种类标识并将所述订阅数据的种类标识返回所述第二应用进程;
其中,所述订阅数据的种类与所述发布数据的种类相同。
8.一种基于共享内存的数据分发装置,其特征在于,包括:
数据发布模块,用于通过第一应用进程,根据发布数据的种类标识,将所述发布数据写入所述种类标识对应的内存空间;
数据订阅模块,用于通过第二应用进程,根据所述种类标识,从所述种类标识对应的内存空间获取所述发布数据;
其中,各种类标识对应的内存空间相互独立。
9.根据权利要求8所述的基于共享内存的数据分发装置,其特征在于,所述数据发布模块,具体用于通过所述第一应用进程,基于所述种类标识对应的内存空间的读写自旋锁,将所述发布数据写入所述种类标识对应的内存空间。
10.根据权利要求8或9所述的基于共享内存的数据分发装置,其特征在于,所述数据订阅模块,具体用于若判断获知所述发布数据被写入所述种类标识对应的内存空间,则通过所述第二应用进程,基于所述种类标识对应的内存空间的读写自旋锁,从所述种类标识对应的内存空间读取所述发布数据。
11.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述基于共享内存的数据分发方法的步骤。
12.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述基于共享内存的数据分发方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011615953.0A CN112749025A (zh) | 2020-12-30 | 2020-12-30 | 基于共享内存的数据分发方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011615953.0A CN112749025A (zh) | 2020-12-30 | 2020-12-30 | 基于共享内存的数据分发方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112749025A true CN112749025A (zh) | 2021-05-04 |
Family
ID=75650013
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011615953.0A Pending CN112749025A (zh) | 2020-12-30 | 2020-12-30 | 基于共享内存的数据分发方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112749025A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105978997A (zh) * | 2016-06-24 | 2016-09-28 | 北京百度网讯科技有限公司 | 数据传输方法和系统 |
CN107704325A (zh) * | 2016-08-08 | 2018-02-16 | 北京百度网讯科技有限公司 | 用于进程间传输消息的方法和装置 |
US20200073736A1 (en) * | 2018-08-30 | 2020-03-05 | Baidu Online Network Technology (Beijing) Co., Ltd. | Message transmission method and apparatus, device and medium |
CN111506436A (zh) * | 2020-03-25 | 2020-08-07 | 炬星科技(深圳)有限公司 | 实现内存共享的方法、电子设备和共享内存数据管理库 |
CN112099967A (zh) * | 2020-08-20 | 2020-12-18 | 深圳市元征科技股份有限公司 | 数据传输方法、终端、装置、设备及介质 |
-
2020
- 2020-12-30 CN CN202011615953.0A patent/CN112749025A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105978997A (zh) * | 2016-06-24 | 2016-09-28 | 北京百度网讯科技有限公司 | 数据传输方法和系统 |
CN107704325A (zh) * | 2016-08-08 | 2018-02-16 | 北京百度网讯科技有限公司 | 用于进程间传输消息的方法和装置 |
US20200073736A1 (en) * | 2018-08-30 | 2020-03-05 | Baidu Online Network Technology (Beijing) Co., Ltd. | Message transmission method and apparatus, device and medium |
CN111506436A (zh) * | 2020-03-25 | 2020-08-07 | 炬星科技(深圳)有限公司 | 实现内存共享的方法、电子设备和共享内存数据管理库 |
CN112099967A (zh) * | 2020-08-20 | 2020-12-18 | 深圳市元征科技股份有限公司 | 数据传输方法、终端、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20060136640A1 (en) | Apparatus and method for hardware semaphore | |
CN104346317B (zh) | 共享资源访问方法和装置 | |
CN108572876B (zh) | 一种读写锁的实现方法及装置 | |
CN110888727A (zh) | 并发无锁队列实现方法、装置及存储介质 | |
CN110704112B (zh) | 在区块链中并发执行交易的方法和装置 | |
EP3379421B1 (en) | Method, apparatus, and chip for implementing mutually-exclusive operation of multiple threads | |
US20200272512A1 (en) | Hardware for supporting os driven observation and anticipation based on more granular, variable sized observation units | |
CN111737020A (zh) | 分布式集群的并发处理方法及装置 | |
CN112559210A (zh) | 一种基于rtx实时系统的共享资源读写互斥方法 | |
US20180373573A1 (en) | Lock manager | |
CN113961378A (zh) | 基于共享内存的进程间通信方法、装置及电子设备 | |
CN113590320A (zh) | 分布式批量任务调度的资源处理方法、装置、设备及介质 | |
CN113342554A (zh) | Io多路复用方法、介质、设备和操作系统 | |
JP2690435B2 (ja) | 処理をプロセッサにディスパッチするためのマイクロプログラム手段を有するマルチプロセッサシステム | |
CN113326149A (zh) | 异构多核系统的核间通信方法和设备 | |
EP3702911A2 (en) | Hardware for supporting os driven load anticipation based on variable sized load units | |
CN112749025A (zh) | 基于共享内存的数据分发方法及装置 | |
US8689230B2 (en) | Determination of running status of logical processor | |
JP7346649B2 (ja) | 同期制御システムおよび同期制御方法 | |
CN112346879B (zh) | 进程管理方法、装置、计算机设备及存储介质 | |
US20110271060A1 (en) | Method And System For Lockless Interprocessor Communication | |
KR100978082B1 (ko) | 공유 메모리형 멀티 프로세서에 있어서의 비동기 원격 절차 호출 방법 및 비동기 원격 절차 호출 프로그램을 기록한 컴퓨터로 판독 가능한 기록 매체 | |
CN113961364A (zh) | 一种大规模锁系统实现方法、装置、存储介质和服务器 | |
CN112068948B (zh) | 数据散列方法、可读存储介质和电子设备 | |
US7111298B1 (en) | Inter-processor competition for a shared resource |
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 |