数据传输方法和系统与流程

文档序号:11807722阅读:243来源:国知局
数据传输方法和系统与流程

本申请涉及计算机领域,具体涉及数据传输领域,尤其涉及数据传输方法和系统。



背景技术:

在系统(例如自动驾驶汽车控制系统)运行过程中,确保系统中多个进程之间保持高效、安全的通信是确保系统稳定性、安全性的重中之重。目前,通常采用的多进程传输数据的方式为:数据接收进程按顺序从共享内存段中读取数据,在数据接收进程处理数据的频率低于数据发送进程发送数据的频率时,遵循最慢读取数据原则。数据发送进程则以读取数据最慢的接收程序节点速度为基准,向共享内存段中写入数据。

然而,当采用上述方式传输数据时,一方面,造成数据发送进程阻塞,大量新的数据无法及时写入到共享内存段中。另一方面,导致数据接收进程仅可以对旧数据进行处理,在诸如自动驾驶汽车控制系统中需要通过数据接收进程对数据的处理而做出行车决策时,导致自动驾驶汽车控制系统做出过时和错误的行车决策,无法满足诸如自动驾驶汽车控制系统对实时性要求极高的需求。



技术实现要素:

本申请提供了数据传输方法和系统,用于解决上述背景技术部分存在的技术问题。

第一方面,本申请提供了数据传输方法,该方法包括:数据接收方获取用于在数据发送方和数据接收方传输数据的共享内存段的最新共享内存块索引,最新共享内存块索引用于指示由数据发送方最新写入的数据所在的共享内存段中的共享内存块的地址;判断最新共享内存块索引与数据接收方上一次读取的数据对应的共享内存块索引是否一致;根据判断结果,确定是否读取最新共享内存块索引对应的共享内存块中的数据。

第二方面,本申请提供了数据传输系统,该数据传输系统包括:数据接收方、数据发送方;其中,数据接收方用于获取用于在数据发送方和数据接收方传输数据的共享内存段的最新共享内存块索引,最新共享内存块索引用于指示由数据发送方最新写入的数据所在的共享内存段中的共享内存块的地址;判断最新共享内存块索引与数据接收方上一次读取的数据对应的共享内存块索引是否一致;根据判断结果,确定是否读取最新共享内存块索引对应的共享内存块中的数据。

本申请提供的数据传输方法和系统,通过数据接收方获取用于在数据发送方和数据接收方传输数据的共享内存段的最新共享内存块索引,最新共享内存块索引用于指示由数据发送方最新写入的数据所在的共享内存段中的共享内存块的地址;判断最新共享内存块索引与数据接收方上一次读取的数据对应的共享内存块索引是否一致;根据判断结果,确定是否读取最新共享内存块索引对应的共享内存块中的数据。实现了当数据接收进程处理数据的频率低于数据发送进程发送数据的频率时,数据接收进程直接读取最新的数据,丢弃未及时处理的旧数据,同时并不影响其他处理数据较快的数据接收进程。从而满足诸如自动驾驶汽车控制系统中对进程处理数据的实时性的要求极高的需求,提升数据传输系统的安全性和稳定性。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1示出了可以应用于本申请的数据传输方法或系统的示例性系统架构;

图2示出了根据本申请的数据传输方法的一个实施例的流程图;

图3示出了根据本申请的数据传输方法的一个示例性原理图;

图4示出了根据本申请的数据传输系统的一个实施例的结构示意图;

图5示出了适于用来实现本申请实施例的数据传输系统的计算机系统的结构示意图。

具体实施方式

下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

图1示出了可以应用于本申请的数据传输方法或系统的实施例的示例性系统架构100。

如图1所示,系统架构100可以包括:数据发送方101、多个数据接收方102、共享内存段103。数据发送方101、数据接收方102利用共享内存段103传输数据。数据发送方101、数据接收方102可以为运行于同一系统中的进程。以自动驾驶汽车控制系统为例,数据发送方101可以用于采集数据,例如数据发送方为传感器处理程序。数据接收方102可以用于处理数据,例如数据接收方为决策和控制程序。

请参考图2,其示出了根据本申请的数据传输方法的一个实施例的流程200。该方法包括以下步骤:

步骤201,数据接收方获取用于数据发送方和数据接收方传输数据的共享内存段的最新共享内存块索引。

在实施例中,最新共享内存块索引用于指示由数据发送方最新写入的数据所在的共享内存段中的共享内存块的地址。

在本实施例中,数据接收方和数据发送方之间可以通过共享内存段传输数据。以数据发送方与数据接收方为自动驾驶汽车控制系统中的两个进程为例,其中一个进程为数据发送进程,用于通过摄像头采集自动驾驶汽车当前行驶在的道路上的路况图像。另外一个进程为数据接收进程,用于对路况图像进行分析识别障碍物。数据发送进程需要提供采集到的路况图像,数据接收进程需要接收数据发送进程采集到的路况图像进行分析识别障碍物。可以将数据发送进程与数据接收进程之间的待传输数据的类型即路况图像称之为话题名称。数据发送方可以创建话题名称共享内存段。用于数据发送方和数据接收方之间的数据传输。

数据发送方可以将待传输数据写入共享内存段,数据接收方可以从内存数据段中读取出由数据发送方写入到共享内存段中的待传输数据。共享内存段可以以共享内存块为单位,数据发送方与数据接收方可以以内存数据块为单位进行待传输数据的写入和读取。每一个共享内存块对应一个索引,可以通过共享内存块的索引查找出相应的共享内存块,进行数据的写入和读取。

在本实施例的一些可选的实现方式中,数据发送方为数据发送进程,数据接收方为数据接收进程。

在本实施例中,数据发送方可以为数据发送进程,数据接收方可以为数据接收进程。在本实施例中,多个数据发送进程与多个数据接收进程之间可以通过同一共享内存段传输数据。多个数据发送进程与多个数据接收进程之间可以通过共享内存块的索引查找出索引对应的共享内存块,在查找出的索引对应的共享内存块中进行数据的写入和读取。

在本实施例中,利用共享内段进行数据传输的数据发送方与数据接收方可以为多个。多个数据发送方和数据接收方可以对应一个话题名称。多个数据发送方可以将待传输数据写入话题名称对应的共享内存段,多个数据接收方可以从话题名称对应的共享内存段读取待传输数据。

在本实施例的一些可选的实现方式中,共享内存段包括:通用标志位变量、通用标志位锁变量,通用标志位变量用于存储最新共享内存块索引。

在本实施例中,可以在共享内存段中存储通用标志位变量,通用标志位变量可以用于存储最新共享内存块索引。当数据发送进程与数据接收进程需要修改通用标志位变量的数值时,需要首先获取通用标志位锁变量。然后,修改通用标志位变量的数值。

在本实施例的一些可选的实现方式中,还包括:数据发送进程获取通用标志位锁变量;确定内存数据段中用于存储待写入的数据的共享内存块的索引;将待写入的数据写入索引对应的共享内存块;当将待写入的数据写入索引对应的共享内存块成功时,获取通用标志位锁变量,将通用标志位变量的数值更新为存储待写入的数据的共享内存块的索引。

在本实施例中,在数据发送进程向共享内存段写入数据时,数据发送进程首先获取通用标志位锁变量。然后,数据发送进程确定共享内存段中用于存储待写入的数据的共享内存块的索引。数据发送进程将数据写入确定出的共享内存段中用于存储待写入的数据的共享内存块中。当将待写入的数据写入索引对应的共享内存块成功时,获取通用标志位变量,将通用标志位变量的数值更新为用于存储待写入的数据的共享内存块的索引。

在本实施例的一些可选的实现方式中,数据接收方获取共享内存段的最新共享内存块索引包括:数据接收进程获取通用标志位锁变量;读取通用标志位变量,以获取共享内存段的最新共享内存块索引。

在本实施例中,在数据接收进程需要从共享内存段中读取数据时,需要首先获取通用标志位锁变量。数据接收进程获取通用标志位锁变量之后,可以读取通用标志位变量,以获取共享内存段的最新共享内存块索引。

步骤202,判断最新共享内存块索引与数据接收方上一次读取的数据对应的共享内存块索引是否一致。

在本实施例中,在通过步骤201获取用于数据发送方和数据接收方传输数据的共享内存段的最新共享内存块索引即最新写入的数据所在的共享内存段中的共享内存块的索引之后,可以判断由数据发送方最新写入的数据所在的共享内存段中的共享内存块的索引与数据接收方上一次读取的数据对应的共享内存块索引是否一致。

以数据发送方为数据发送进程,数据接收方为数据接收进程为例,多个数据发送进程与多个数据接收进程之间可以通过同一共享内存段传输数据。最新写入的数据可以由数据发送进程中任意一个进程写入到共享内存段中。当多个数据接收进程中任意一个数据接收进程从共享内存段中读取数据时,可以判断最新写入的数据所在的共享内存段中的共享内存块的索引与该数据接收进程上一次读取的数据对应的共享内存块索引是否一致。

步骤203,根据判断结果,确定是否读取最新共享内存块索引对应的共享内存块中的数据。

在本实施例中,在通过步骤202判断最新共享内存块索引与数据接收方上一次读取的数据对应的共享内存块索引是否一致之后,可以根据判断结果,确定是否读取最新共享内存块索引对应的共享内存块中的数据。

在本实施例的一些可选的实现方式中,根据判断结果,确定是否读取最新共享内存块索引对应的共享内存块中的数据包括:当判断结果为最新共享内存块索引与数据接收方上一次读取的数据对应的共享内存块索引一致时,不读取最新共享内存块索引对应的共享内存块中的数据;当判断结果为最新共享内存块索引与数据接收方上一次读取的数据对应的共享内存块索引不一致时,读取最新共享内存块索引对应的共享内存块中的数据。

以数据发送方为数据发送进程,数据接收方为数据接收进程为例,多个数据发送进程与多个数据接收进程之间可以通过同一共享内存段传输数据。在多个数据接收进程中任意一个数据接收进程从共享内存段中读取数据时,当该数据接收进程判断出最新写入的数据所在的共享内存段中的共享内存块的索引与数据接收进程上一次读取的数据对应的共享内存块索引一致时,则可以确定该数据接收进程已获取共享内存块中最新的数据,则不从最新共享内存块索引中读取数据。当该数据接收进程判断出最新写入的数据所在的共享内存段中的共享内存块的索引与数据接收进程上一次读取的数据对应的共享内存块索引不一致时,则可以确定读取最新共享内存块索引对应的共享内存块中的数据。

以数据发送方与数据接收方为自动驾驶系统中的进程为例,数据发送进程可以用于通过摄像头采集自动驾驶汽车当前行驶在的道路上的路况图像,数据接收进程可以用于对路况图像进行分析识别障碍物。数据发送进程和数据接收进程之间的话题名称可以为传输的数据的类型即路况图像。利用共享内段进行数据传输的数据发送方与数据接收方可以为多个。多个数据发送方和数据接收方可以对应一个话题名称。多个数据发送方可以将待传输数据写入话题名称对应的共享内存段,多个数据接收方可以从话题名称对应的共享内存段读取待传输数据。

当数据接收进程处理数据的频率低于数据发送进程发送数据的频率时,数据接收进程可以直接读取最新的数据即最新的路况图像,丢弃未及时处理的旧数据即旧的路况图像,使得该数据接收进程依然可以根据最新的路况图像来识别障碍物。同时并不影响其他处理数据较快的数据接收进程路况图像对障碍物进行识别。从而满足自动驾驶汽车控制系统中对进程处理数据的实时性的要求极高的需求,数据接收进程获取足够量的数据进行分析,实时而有效地生成行车决策,提升自动驾驶汽车控制系统的安全性和稳定性。

请参考图3,其示出了根据本申请的数据传输方法的一个示例性原理图。

在图3中,示出了发送程序节点、共享内存段、多个接收程序节点即接收程序节点1、接收程序节点2、接收程序节点3。发送程序节点可以为数据发送进程,接收程序节点可以为数据接收进程。

发送程序节点可以发布一个话题名称,多个接收程序节点均可以订阅该话题名称。发送程序节点1与多个接收程序节点之间可以通过话题名称对应的共享内存段进行数据传输。

发送程序节点与多个接收程序节点利用话题对应的共享内存段写入或读取待传输数据时,可以以共享内存段中的共享内存块为单位进行写入或读取。存储在共享内存块中的数据可以称之为消息。

在该话题名称对应的共享内存段中,可以存储通用标志符,通用标志符用于发送程序节点按序写入数据以及接收程序节点按序读取数据。通用标志符可以包含通用标志位变量和通用标志位锁变量。其中,标志位变量用于标识当前由发送程序节点写入数据的最新共享内存块索引。订阅该话题名称的所有接收程序节点可以通过读取该标志位变量来决定下一个可被读取的共享内存块。通用标志位锁变量为一个互斥型变量。由于同一话题名称下的发送程序节点和接收程序节点可以为多个,通用标志位锁变量用于确保同一时刻仅有一个发送程序节点或接收程序节点修改或读取通用标志位变量。

下面说明发送程序节点向共享内存段写入数据的过程:

当发送程序节点需要将消息写入共享内存段中时,可以首先获取通用标志位锁变量后读取当前通用标志位变量数值,遍历计算出共享内存段中下一个可写入数据的共享内存块,即当前状态下一个未被写入数据或者读取数据的共享内存块。发送程序节点可以获取该共享内存块的排他锁,同时,记录目前有一个发送程序节点准备写入数据,将消息写入到该共享内存块。发送程序节点如果写入消息成功,可以再次拿到通用标志位锁变量后修改通用标志位变量。发送程序节点如果数据写入失败,则可以丢弃该消息,返回继续发送下一个消息。

下面说明多个接收程序节点从共享内存段读取数据的过程:

接收程序节点获取通用标志位锁变量后,可以读取当前通用标志位变量数值,根据通用标志位变量数值,查找出下一个可以读取数据的共享内存块。然后,可以检测该共享内存块的索引和上次读取的共享内存块索引是否一致。如果该共享内存块的索引和上次读取的共享内存块索引一致,说明接收程序节点读取数据的频率大于发送程序节点写入数据的频率,则不再读取该共享内存块对应的消息,可以直接发送一个条件信号量等待下一次新消息写入。如果该共享内存块的索引和上次读取的共享内存块索引不一致,则说明接收程序节点读取数据的频率不大于发送程序节点写入数据的频率,接收程序节点可以直接忽略从上次读取到本次读取之间的消息,直接读取该共享内存块对应的最新消息。接收程序节点此次读取消息无论成功还是失败,均可以返回开始读取下一个数据。

在本实施例中,发送程序节点可以不断地将数据写入共享内存段中,当接收程序节点处理数据的频率低于发送程序节点发送数据的频率的时,接收程序节点直接读取最新的数据,丢弃未及时处理的旧数据。一方面,避免了发送程序节点因考虑处理数据频率低的进程而造成阻塞的问题,提升数据传输系统的运行效率。另一方面,使得最新的数据可以及时地写入共享内存段中,接收程序节点可以对最新的数据进行处理,从而满足诸如自动驾驶汽车控制系统中对进程处理数据的实时性的要求极高的需求。

请参考图4,作为对上述各图所示方法的实现,本申请提供了一种数据传输系统的一个实施例,该实施例与图2所示的方法实施例相对应。

如图4所示,本实施例的数据传输系统400包括:数据接收方401、数据发送方402。其中,数据接收方401用于获取用于数据发送方402和数据接收方401传输数据的共享内存段的最新共享内存块索引,最新共享内存块索引用于指示由数据发送方最新写入的数据所在的共享内存段中的共享内存块的地址;判断最新共享内存块索引与数据接收方上一次读取的数据对应的共享内存块索引是否一致;根据判断结果,确定是否读取最新共享内存块索引对应的共享内存块中的数据。

在本实施例的一些可选的实现方式中,数据发送方为数据发送进程,数据接收方为数据接收进程。

在本实施例的一些可选的实现方式中,共享内存段包括:通用标志位变量、通用标志位锁变量,通用标志位变量用于存储最新共享内存块索引。

在本实施例的一些可选的实现方式中,数据接收进程用于:获取通用标志位锁变量;读取通用标志位变量,以获取共享内存段的最新共享内存块索引。

在本实施例的一些可选的实现方式中,数据发送进程用于:获取通用标志位锁变量;确定共享内存段中用于存储待写入的数据的共享内存块的索引;将待写入的数据写入索引对应的共享内存块;当将待写入的数据写入索引对应的共享内存块成功时,获取通用标志位锁变量;将通用标志位变量的数值更新为共享内存块的索引。

在本实施例的一些可选的实现方式中,数据接收进程用于:当判断结果为最新共享内存块索引与数据接收方上一次读取的数据对应的共享内存块索引一致时,不读取最新共享内存块索引对应的共享内存块中的数据;当判断结果为最新共享内存块索引与数据接收方上一次读取的数据对应的共享内存块索引不一致时,读取最新共享内存块索引对应的共享内存块中的数据。

图5示出了适于用来实现本申请实施例的数据传输系统的计算机系统的结构示意图。

如图5所示,计算机系统500包括中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM503中,还存储有系统500操作所需的各种程序和数据。CPU501、ROM 502以及RAM503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。

以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。

特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。

附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

作为另一方面,本申请还提供了一种非易失性计算机存储介质,该非易失性计算机存储介质可以是上述实施例中所述设备中所包含的非易失性计算机存储介质;也可以是单独存在,未装配入终端中的非易失性计算机存储介质。上述非易失性计算机存储介质存储有一个或者多个程序,当所述一个或者多个程序被一个设备执行时,使得所述设备:数据接收方获取用于在数据发送方和数据接收方传输数据的共享内存段的最新共享内存块索引,所述最新共享内存块索引用于指示由数据发送方最新写入的数据所在的共享内存段中的共享内存块的地址;判断所述最新共享内存块索引与所述数据接收方上一次读取的数据对应的共享内存块索引是否一致;根据判断结果,确定是否读取最新共享内存块索引对应的共享内存块中的数据。

以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

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