CN110489246B - 数据传输与内存管理方法、装置以及相关产品 - Google Patents
数据传输与内存管理方法、装置以及相关产品 Download PDFInfo
- Publication number
- CN110489246B CN110489246B CN201910738338.XA CN201910738338A CN110489246B CN 110489246 B CN110489246 B CN 110489246B CN 201910738338 A CN201910738338 A CN 201910738338A CN 110489246 B CN110489246 B CN 110489246B
- Authority
- CN
- China
- Prior art keywords
- memory
- plug
- upstream
- amount
- application
- 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.)
- Active
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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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)
- Stored Programmes (AREA)
Abstract
本申请提供一种插件间数据传输与内存管理方法、装置及相关产品,所述方法用于对插件的数据传输和内存进行管理。本申请提供的技术方案能够防止插件间数据传输过程中的数据积压,使得插件无需关注数据传输过程,而更加专注与处理自身业务逻辑,并且使得插件不会感知内存的申请和释放。
Description
技术领域
本申请涉及信息处理技术领域,具体涉及一种数据传输与内存管理方法、装置以及相关产品。
背景技术
视频结构化相关应用通常是基于流水线思想进行开发,例如,在一种深度学习视频流处理框架中,大致可以分为视频解码、深度学习推理、图像后处理三个流水级。各级数据处理过程中存在大量的数据操作,包括内存申请、数据传输。要使得应用能够长期稳定的运行,控制好其中的数据操作至关重要。流水线上的个节点称为插件,插件是能够实现一定功能的抽象单元,其可以为一种硬件器件,也可以为一种软件应用。
在一个流水线应用中,上游插件不停的往下游插件输送数据。当上游插件的处理速度比下游插件的处理数据更快时,下游插件容易堆积过多的数据。由于较慢的下游插件是整个流水线吞吐速率的瓶颈,这些堆积的数据是无意义的,只会造成内存的疯狂占用。当机器内存被占满,更会导致流水线整体性能下降,甚至宕机。
而且,在源源不断的文件流中,数据可以认为是无穷无尽的,需要控制好内存的申请和释放时机。频繁的申请和释放内存,对插件性能也有较大的损耗。
发明内容
本申请实施例提供了一种数据传输与内存管理方法、装置以及相关产品,防止插件间数据传输过程中的数据积压,并且使得插件不会感知内存的申请和释放。
第一方面,提供一种数据传输与内存管理方法,包括:
基于第一插件的第一连接器识别参数,将所述第一插件识别为上游插件;
获取最大申请内存块数量的指定命令;
接收所述上游插件的内存申请,所申请的内存用于存放所述上游插件的输出数据;以及
基于所述最大申请内存块数量对所述上游插件的申请做出响应。
第二方面,提供一种数据传输与内存管理装置,所述装置包括:
第一识别单元,用于基于第一插件的第一连接器识别参数,将所述第一插件识别为上游插件;
第一获取单元,用于获取最大申请内存块数量的指定命令;
接收单元,用于接收所述上游插件的内存申请,所申请的内存用于存放所述上游插件的输出数据;以及
响应单元,用于基于所述最大申请内存块数量对所述上游插件的申请做出响应。
第三方面,提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现第一方面的方法。
第四方面,提供一种计算机可读存储介质,其存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行第一方面提供的方法。
第五方面,提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序可操作来使计算机执行第一方面提供的方法。
本申请提供的技术方案抽象出一种连接器,用于控制和管理插件的内存申请和释放以及插件间的数据传输,使得插件只需专注自身的数据处理,而无须考虑内存的申请和释放,并且能够解决由于插件间处理能力的差别导致的造成的数据传输过程中的数据堆积、系统资源被无意义地占用的问题。从而,本申请能够提供防止插件间数据传输过程中的数据积压,使得插件无需关注数据传输过程,而更加专注与处理自身业务逻辑,并且使得插件不会感知内存的申请和释放的优点。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为根据本申请实施例的插件间连接的示意图。
图2为根据本申请实施例的连接器的示意图。
图3为根据图1所示实施例的插件与连接器进行绑定的示意图。
图4是根据本申请实施例的数据传输和内存管理方法的流程图。
图5是根据本申请实施例的数据传输和内存管理装置的示意图。
图6是根据本申请实施例提供的一种电子设备的结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
对于本技术方案来说,由插件系统创建插件(Module),插件系统是指提供特定功能的程序,这个程序可以集成到大的软件系统中,通过插件系统,让第三方开发者构造自己的插件(Module),拓展整个软件系统的功能。在实际中,通过Get Input Data接口获取上一个插件的输出数据,通过Get Output Data接口把本插件的输出数据传递给下一个插件。实现减少内存的申请和释放次数,提高程序运行效率。用户根据流水线机制(pipeline)注册多个预置插件或者用户自定义的插件,这些插件(Module)之间用连接器(Connector)组件进行连接,每个插件(Module)可以连接多个输入连接器和多个输出连接器,使用同一个连接器分别作为输入连接器和输出连接器的两个插件即可自动连接在一起,插件(Module)间的数据通过连接器传输。
流水线机制将插件(Module)按照插件(Module)的构造函数中使用的连接器Connector的队列机制连接成流水线。用户只需要往Pipeline里送入数据,之后各个Module会自动完成每一环节的处理,并将数据向下一个插件传递。
连接器Connector是连接流水线上各个插件之间的连接器。每个插件可以有0到多个输入连接器和0到多个输出连接器。上游插件的输出连接器通常作为下游插件的输入连接器,上游插件在对应的输出连接器中写入数据,下游插件从对应的输入连接器中读取数据。以此达到数据流通的目的。同时每个连接器包含多个buffer对象。其中,每个buffer对象有一个数据队列和一个回收队列。
基于上述描述,图1为根据本申请实施例的插件间连接的示意图。如图1所示,点A、点B和点C分别表示三个插件,插件A与插件B连接,插件B与插件C连接,插件A是插件B的上游,而插件B是插件C的上游。
在此,定义一种连接器,用于与插件绑定。如图1所示,插件A和插件B与第一连接器绑定,插件A把该第一连接器绑定为输出连接器,插件B把该第一连接器绑定为输入连接器。插件A和插件B绑定了同一个连接器时,并且插件A把该连接器绑定为输出连接器,插件B把该连接器绑定为输入连接器时,则表示两个插件互连。其中,插件A成为插件B的上游插件,插件B称作插件A的下游插件。
类似地,如图1所示,插件B和插件C与第二连接器绑定,插件B把该第二连接器绑定为输出连接器,插件C把该第二连接器绑定为输入连接器。插件B和插件C绑定了同一个连接器时,并且插件B把该连接器绑定为输出连接器,插件C把该连接器绑定为输入连接器时,则表示两个插件互连。其中,插件B成为插件C的上游插件,插件C称作插件B的下游插件。被绑定为输出连接器的连接器向该插件提供获取用来存放插件输出数据的内存块的功能;被绑定为输入连接器的连接器向该插件提供获取输入数据的接口。
为了方便理解,可以将本申请所述的连接器看作一种功能节点,用于完成如上所述以及下文进一步描述的各种功能。连接器的实现方式有很多种,例如,一个连接器包含多个buffer对象,每个buffer对象有一个数据队列和一个回收队列。如图2所示,插件A与插件B之间的第一连接器包括队列0和队列1,队列0的作用是将模块A的输出结果作为输入传给模块B,队列1的作用是将模块B使用过的缓存队列重复提供到模块A,作为承接模块A输出的空缓存。
在深度学习算法中,模块之间传输的最基本的数据类型张量(Tensor)就存放在队列中。在概念上,张量是对矢量和矩阵,向潜在的更高维度的泛化。在数学上,张量可以被表示成一个n维的数组,其中n为大于等于1的整数。在进行图像处理时、图片、视频可以被表示为不同形状,不同维度顺序的张量。同时,在深度学习中,最为常见的操作,卷积,全连接,其权值也都可以被表示为张量。
根据一个实施例,可以通过插件中的连接器识别参数,将插件与连接器进行绑定。图3为根据图2所示实施例的插件与连接器进行绑定的示意图。如图3所示,每个插件中都会包含两个数组,一个数组表示输入连接器IC,另一个数组表示输出连接器OC。根据图1所示的插件连接关系,插件A的IC中为空,而OC为connector1,表示第一连接器为其输出连接器;插件B的IC中为connector1,而OC为connector2,表示第一连接器为其输入连接器,而第二连接器为其输出连接器;插件C的IC中为connector2,而OC为空,表示第第二连接器为其输入连接器。
需要说明的是,每个插件可以有0个或一个以上输入连接器以及0个或一个以上输出连接器。上游插件的输出连接器通常作为下游插件的输入连接器,上游插件在所绑定的输出连接器中写入数据,下游插件从所绑定的输入连接器中读取数据,以此达到数据传输的目的。当一个插件需要绑定多个输入连接器或多个输出连接器时,可以通过图3所示的方式进行绑定。例如,当插件B需要将第三连接器绑定为输入连接器,并将第四连接器绑定为输入连接器时,在插件B的IC中填入connector3,而OC填入connector4,其中参数connector3和connector4分别表示第三连接器和第四连接器。
以上只是将插件与连接器进行绑定的一种实现方式,本领域技术人员在本申请的启示下,在不付出创造性劳动的前提下能够想到的其他实现方式,都属于本申请保护的范围。
连接器基于插件的连接器识别参数,将该插件识别为上游插件或下游插件。例如,第一连接器基于插件A的OC中的connector1,将插件A识别为上游插件;第一连接器基于插件B的IC中的connector1,将插件B识别为下游插件,等等。由此,完成所有插件与各自连接器进行绑定。
上述实施例描述了一个插件与一个下游插件和/或一个上游插件相连的方案。在另一个实施例中,一个插件可以与多个下游插件和/或多个上游插件相连,例如,对于插件B,除了上游插件A,还有上游插件D,那么插件A与插件B之间具有一个连接器a,插件D与插件B之间具有另一个连接器b;类似地,对于插件B,除了下游插件C,还有下游插件E,那么插件B与插件C之间具有一个连接器c,插件B与插件E之间具有另一个连接器d。同样地,按照上述插件与连接器绑定的方法,完成所有插件与相关连接器进行绑定。
在提出连接器的概念后,以上述插件A、插件B以及第一连接器为例,插件间数据传输的过程大致为:插件A作为上游插件,需要输出数据到插件B时,向第一连接器申请内存,第一连接器向插件A提供所需内存,插件A将输出数据存入该内存中,插件B需要输入数据时,向第一连接器申请数据,第一连接器将内存中存储的插件A存入的数据传输给插件B。
图4是根据本申请实施例的数据传输和内存管理方法的流程图。如图4所示,该数据传输和内存管理方法包括:
S100,基于第一插件的第一连接器识别参数,将所述第一插件识别为上游插件。
如图1至图3所述,第一连接器首先获知插件A的连接器识别参数,从而得知插件A是上游插件,第一连接器作为插件A的输出连接器,该输出连接器用于向插件A提供获取用来存放插件A的输出数据的内存块。
S110,获取最大申请内存块数量的指定命令。
最大申请内存块数量表示系统可分配给连接器管理的内存的最大数量。在创建连接器的时候,可指定最大申请内存块数量来限制连接器中申请的内存数量。最大申请内存块数量的指定方式可以是采用默认值,也可以是认为设定值。最大申请内存块数量可以选择任意数值,例如,最大申请内存块数量可以为4个数据实例,但是,一旦指定之后,最大申请内存块数量就确定下来,不再更改。
S120,接收上游插件的内存申请,所申请的内存用于存放所述上游插件的输出数据。
当需要存放输出数据时,上游插件A需要向第一连接器申请内存。第一连接器在接收到该内存申请后,根据自身内存情况决定是否给上游插件A分配内存。
S130,基于最大申请内存块数量对上游插件的申请做出响应。
第一连接器在接收到该内存申请后,根据最大申请内存块数量决定是否给上游插件A分配内存。根据最大申请内存块数量决定是否给上游插件A分配内存的具体方案会在下文中进行详细描述。
根据上述数据传输和内存管理方法,当上游插件需要传输数据时,首先需要询问连接器是否有空闲的内存供其存放数据,这样,通过“最大申请内存块数量”的限制,防止上游插件不受约束的申请内存,占用系统资源。尤其是下游插件处理速度较慢造成处理积压的情况下,能够有效缓解处理积压,避免系统资源的无意义占用。
根据一个优选实施例,该数据传输方法还包括如下步骤:
S140,基于第二插件的第二连接器识别参数,将第二插件识别为下游插件。
如图1至图3所述,第一连接器获知插件B的连接器识别参数,从而得知插件B是下游插件,第一连接器作为插件B的输入连接器,该输入连接器用于向插件B提供获取输入数据的接口,即通过第一连接器获得上游插件(例如,插件A)的输出数据。
S150,获取所述下游插件的数据输入申请。
当需要数据输入时,下游插件B需要向第一连接器申请数据输入。
S160,基于数据输入申请,将数据传输至所述下游插件。
第一连接器在接收到该数据输入申请后,将所管理内存中的数据传递给下游插件。
以上描述了上游插件与下游插件通过连接器进行数据传输的过程,其中,连接器所管理的内存用来存放上游插件输出的数据,以及向下游插件传递输入数据。
根据一个优选实施例,对于步骤S130,包括如下子步骤:
S1301,将上游插件申请的内存数量与已占用内存数量之和与所述最大申请内存块数量进行比较。
对于上游插件的内存申请,连接器需要判断所管理的内存中是否有足够的空间供上游插件使用。连接器首先统计上游插件申请的内存数量与已占用内存数量之和,例如,上游插件申请的内存数量为1个数据实例,已占用内存数量为2个数据实例,那么二者之和就是3个数据实例。
S1302,响应于上游插件申请的内存数量与已占用内存数量之和小于等于所述最大申请内存块数量的比较结果,为所述上游插件分配所申请的内存数量。
例如,最大申请内存块数量为4个数据实例,上游插件申请的内存数量与已占用内存数量之和为3个数据实例,那么,连接器就为上游插件分配所申请的内存数量。
根据进一步的实施例,步骤S1302还可具体为如下步骤:
响应于空闲内存数量满足所述上游插件的内存申请数量,直接将所述空闲内存分配给上游插件;以及/或者
响应于空闲内存数量不满足所述上游插件的内存申请数量,申请内存并将申请到的内存分配给所述上游插件。
例如,在上游插件申请的内存数量与已占用内存数量之和小于等于所述最大申请内存块数量的情况下,连接器所管理的内存中的空闲内存数量为1个数据实例,上游插件申请的内存数量为1个数据实例,则连接器直接将该空闲内存分配给上游插件使用。
再如,在上游插件申请的内存数量与已占用内存数量之和小于等于所述最大申请内存块数量的情况下,连接器所管理的内存中的没有空闲内存,上游插件申请的内存数量为1个数据实例,连接器向系统申请1个数据实例的内存,并将申请到的1个数据实例内存分配给上游插件。
进一步地,步骤S130还包括如下子步骤:
S1303,响应于上游插件申请的内存数量与已占用内存数量之和大于所述最大申请内存块数量的比较结果,等待从已占用的内存中释放的内存,并在上游插件申请的内存数量与更新的已占用内存数量之和小于等于所述最大申请内存块数量时,为上游插件分配所申请的内存数量。
还是就上述的例子,如果上游插件申请的内存数量为3个数据实例,上游插件申请的内存数量与已占用内存数量之和为5个数据实例,即大于4个数据实例的最大申请内存块数量,那么连接器就不向上游插件分配内存。此时,插件索要内存块的操作被阻塞,插件接收不到连接器的反馈,直到连接器中有空闲的内存块为止。
当释放了一部分或全部已占用内存后,例如,从已占用内存中释放了1个或两个数据实例后,更新的已占用内存数量为1个或0个数据实例,上游插件申请的内存数量与更新的已占用内存数量之和就小于等于所述最大申请内存块数量,连接器上游插件分配所申请的内存数量。
由此,通过“最大申请内存块数量”的限制,防止上游插件不受约束的申请内存,占用系统资源。尤其是下游插件处理速度较慢造成处理积压的情况下,能够有效缓解处理积压,避免系统资源的无意义占用。
进一步地,步骤S160包括如下子步骤:
S1601,判断内存中是否已经存放了来自上游插件的输出数据。
S1602,响应于已经存放了来自上游插件的输出数据判断结果,将输出数据传递给所述下游插件。
S1603,响应于未存放来自上游插件的输出数据判断结果,等待来自上游插件的输出数据,并在收到来自上游插件的输出数据时,将输出数据传递给所述下游插件。
上述上游插件与下游插件数据传输的过程,涉及到内存的不断申请和释放。对于内存的申请和释放,该数据传输和内存管理方法包括如下步骤:
S170,回收上游插件占用的内存。
在上游插件将输出数据存放在所申请的内存后,将所申请的内存释放。然而,从上游插件释放的内存不是将内存释放至系统,就通过连接器识别参数,将内存释放至分配该内存的连接器,即释放的内存还是由该连接器管理。
S180,回收下游插件的输入数据占用的内存。
当下游插件从连接器获取输入数据并处理完毕后,将输入数据占用的内存释放。同样地,从下游插件释放的内存不是将内存释放至系统,就通过连接器识别参数,将内存释放连接器,即释放的内存还是由该连接器管理。
存在很多内存释放机制,例如在C++实现中,采用RALL机制,在析构函数中把内存块返还给连接器,交由连接器管理。需要注意的是,这只是一种实现内存释放机制的方式,本领域技术人员可以采用其他可以实现这种内存释放机制的方式,所有这些方式都属于本发明公开的范围。
这样,通过步骤S170和S180,当上游插件取得一份内存块并往里面输出数据后,通过步骤S170,该输出数据将回到连接器中,并在下游插件向连接器索要输入数据时传输至下游插件;当下游插件从连接器管理的内存中获取到输入数据并处理完毕时,通过步骤S180,该内存仍然由连接器管理。由此,通过步骤S170和步骤S180,使得上游插件和下游插件不用关注数据传输过程,而更加专注与处理自身业务逻辑,实现了数据传输过程隐藏。同时,通过步骤S170和步骤S180,连接器从系统申请后的内存会一直由该连接器管理,使得连接器具有内存复用的功能。
在连接器和插件的操作过程中,一个连接器往往会被两个插件访问,每个插件可能时在不同的线程进行访问。并且,同一个插件也可能在多个线程中访问同一个连接器。为了保证插件获取数据时线程安全的,该数据传输和内存管理方法包括如下步骤:
S190,响应于多线程冲突的指令,调用多线程冲突解决功能函数。
在出现多线程冲突时,连接器调用多线程冲突解决功能函数来解决多线程冲突。
对于为包含多个buffer对象,每个buffer对象有一个数据队列和一个回收队列的连接器,连接器的内部用来存放数据的组件为线程安全的队列。该队列使用互斥锁来保证线程安全。该互斥锁为解决多线程冲突的一种具体实现方式。本领域技术人员可以采用其他解决多线程冲突的方式,所有这些方式都属于本申请的保护范围。另外,多线程冲突解决功能函数不只包括单个函数,还可以是两个以上函数的函数集。
图5是根据本申请实施例的数据传输和内存管理装置的示意图。如图5所示,该数据传输和内存管理装置包括:
第一识别单元100,用于基于第一插件的第一连接器识别参数,将所述第一插件识别为上游插件。
如图1至图3所述,第一连接器首先获知插件A的连接器识别参数,从而得知插件A是上游插件,第一连接器作为插件A的输出连接器,该输出连接器用于向插件A提供获取用来存放插件A的输出数据的内存块。
第一获取单元110,用于获取最大申请内存块数量的指定命令。
接收单元120,用于接收上游插件的内存申请,所申请的内存用于存放所述上游插件的输出数据。
响应单元130,基于最大申请内存块数量对上游插件的申请做出响应。
第一连接器在接收到该内存申请后,根据最大申请内存块数量决定是否给上游插件A分配内存。根据最大申请内存块数量决定是否给上游插件A分配内存的具体方案会在下文中进行详细描述。
根据上述数据传输和内存管理装置,当上游插件需要传输数据时,首先需要询问连接器是否有空闲的内存供其存放数据,这样,通过“最大申请内存块数量”的限制,防止上游插件不受约束的申请内存,占用系统资源。尤其是下游插件处理速度较慢造成处理积压的情况下,能够有效缓解处理积压,避免系统资源的无意义占用。
根据一个优选实施例,该数据传输装置还包括如下单元:
第二识别单元140,用于基于第二插件的第二连接器识别参数,将第二插件识别为下游插件。
第二获取单元150,用于获取所述下游插件的数据输入申请。
当需要数据输入时,下游插件B需要向第一连接器申请数据输入。
传输单元160,用于基于数据输入申请,将数据传输至所述下游插件。
第一连接器在接收到该数据输入申请后,将所管理内存中的数据传递给下游插件。
以上描述了上游插件与下游插件通过连接器进行数据传输的过程,其中,连接器所管理的内存用来存放上游插件输出的数据,以及向下游插件传递输入数据。
根据一个优选实施例,对于响应单元130,包括如下子单元:
比较子单元1301,用于将上游插件申请的内存数量与已占用内存数量之和与所述最大申请内存块数量进行比较。
第一内存分配子单元1302,用于响应于上游插件申请的内存数量与已占用内存数量之和小于等于所述最大申请内存块数量的比较结果,为所述上游插件分配所申请的内存数量。
第一内存分配子单元1302用于:响应于空闲内存数量满足所述上游插件的内存申请数量,直接将所述空闲内存分配给上游插件;以及/或者响应于空闲内存数量不满足所述上游插件的内存申请数量,申请内存并将申请到的内存分配给所述上游插件。
进一步地,响应单元130还包括如下子单元:
第二内存分配子单元1303,用于响应于上游插件申请的内存数量与已占用内存数量之和大于所述最大申请内存块数量的比较结果,等待从已占用的内存中释放的内存,并在上游插件申请的内存数量与更新的已占用内存数量之和小于等于所述最大申请内存块数量时,为上游插件分配所申请的内存数量。
由此,通过“最大申请内存块数量”的限制,防止上游插件不受约束的申请内存,占用系统资源。尤其是下游插件处理速度较慢造成处理积压的情况下,能够有效缓解处理积压,避免系统资源的无意义占用。
进一步地,传输单元160包括如下子单元:
判断子单元1601,用于判断内存中是否已经存放了来自上游插件的输出数据。
第一数据传递子单元1602,用于响应于已经存放了来自上游插件的输出数据判断结果,将输出数据传递给所述下游插件。
第二数据传输子单元1603,用于响应于未存放来自上游插件的输出数据判断结果,等待来自上游插件的输出数据,并在收到来自上游插件的输出数据时,将输出数据传递给所述下游插件。
上述上游插件与下游插件数据传输的过程,涉及到内存的不断申请和释放。对于内存的申请和释放,该数据传输和内存管理装置包括如下单元:
第一内存回收单元170,用于回收上游插件占用的内存。
在上游插件将输出数据存放在所申请的内存后,将所申请的内存释放。然而,从上游插件释放的内存不是将内存释放至系统,就通过连接器识别参数,将内存释放至分配该内存的连接器,即释放的内存还是由该连接器管理。
第二内存回收单元180,用于回收下游插件的输入数据占用的内存。
当下游插件从连接器获取输入数据并处理完毕后,将输入数据占用的内存释放。同样地,从下游插件释放的内存不是将内存释放至系统,就通过连接器识别参数,将内存释放连接器,即释放的内存还是由该连接器管理。
这样,通过第一内存回收单元170和第二内存回收单元180,当上游插件取得一份内存块并往里面输出数据后,通过第一内存回收单元S170,该输出数据将回到连接器中,并在下游插件向连接器索要输入数据时传输至下游插件;当下游插件从连接器管理的内存中获取到输入数据并处理完毕时,通过第二内存回收单元180,该内存仍然由连接器管理。由此,通过步第一内存回收单元170和第二内存回收单元180,使得上游插件和下游插件不用关注数据传输过程,而更加专注与处理自身业务逻辑,实现了数据传输过程隐藏。同时,通过第一内存回收单元170和第二内存回收单元180,连接器从系统申请后的内存会一直由该连接器管理,使得连接器具有内存复用的功能。
在连接器和插件的操作过程中,一个连接器往往会被两个插件访问,每个插件可能时在不同的线程进行访问。并且,同一个插件也可能在多个线程中访问同一个连接器。为了保证插件获取数据时线程安全的,该数据传输和内存管理单元包括如下单元:
调用单元190,用于响应于多线程冲突的指令,调用多线程冲突解决功能函数。
在出现多线程冲突时,连接器调用多线程冲突解决功能函数来解决多线程冲突。
参阅图6,图6提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如图4所示的方法以及细化方案。
上述处理器具体可以为通用处理器,例如中央处理器CPU、图像处理器GPU,当然在实际应用中,上述处理器还可以为神经网络专用处理器,例如脉冲阵列机、机器学习处理器等等,当然上述处理器还可以为通用处理器与神经网络专用处理器结合的处理器,本申请并不局限上述处理器的具体表现形式。
上述电子设备可以包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。
上述交通工具包括飞机、轮船和/或车辆;上述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
本申请实施例还提供一种计算机可读存储介质,其存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行如图3所示的方法以及细化方案。
本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序可操作来使计算机执行如图3所示的方法以及细化方案。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干算子用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来算子相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取器(英文:Random Access Memory,简称:RAM)或光盘等。
以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (18)
1.一种数据传输与内存管理的方法,所述方法由连接器来实现,特征在于,包括:
基于第一插件的第一连接器识别参数,将所述第一插件识别为上游插件;
获取最大申请内存块数量的指定命令;
接收所述上游插件的内存申请,所申请的内存用于存放所述上游插件的输出数据;以及
基于所述最大申请内存块数量对所述上游插件的申请做出响应,
其中,所述方法还包括:
基于第二插件的第二连接器识别参数,将所述第二插件识别为下游插件;
获取所述下游插件的数据输入申请;以及
基于所述数据输入申请,将数据传输至所述下游插件;
其中,最大申请内存块数量为系统可分配给连接器管理的内存的最大数量。
2.根据权利要求1所述的方法,其特征在于,所述基于所述最大申请内存块数量对所述上游插件的申请做出响应包括:
将所述上游插件申请的内存数量与已占用内存数量之和与所述最大申请内存块数量进行比较;以及
响应于所述上游插件申请的内存数量与已占用内存数量之和小于等于所述最大申请内存块数量的比较结果,为所述上游插件分配所申请的内存数量。
3.根据权利要求2所述的方法,其特征在于,所述基于所述最大申请内存块数量对所述上游插件的申请做出响应还包括:
响应于所述上游插件申请的内存数量与已占用内存数量之和大于所述最大申请内存块数量的比较结果,等待从已占用的内存中释放的内存,并在所述上游插件申请的内存数量与更新的已占用内存数量之和小于等于所述最大申请内存块数量时,为上游插件分配所申请的内存数量。
4.根据权利要求2所述的方法,其特征在于,所述响应于所述上游插件申请的内存数量与已占用内存数量之和小于等于所述最大申请内存块数量的比较结果,为所述上游插件分配所申请的内存数量包括:
响应于空闲内存数量满足所述上游插件的内存申请数量,直接将所述空闲内存分配给上游插件;以及/或者
响应于空闲内存数量不满足所述上游插件的内存申请数量,申请内存并将申请到的内存分配给所述上游插件。
5.根据权利要求1所述的方法,其特征在于,所述基于所述数据输入申请,将数据传输至所述下游插件包括:
判断内存中是否已经存放了来自所述上游插件的输出数据;
响应于已经存放了来自所述上游插件的输出数据判断结果,将输出数据传递给所述下游插件;以及/或者
响应于未存放来自所述上游插件的输出数据判断结果,等待来自上游插件的输出数据,并在收到来自所述上游插件的输出数据时,将输出数据传递给所述下游插件。
6.根据权利要求1所述的方法,其特征在于,还包括:回收所述上游插件占用的内存。
7.根据权利要求1所述的方法,其特征在于,还包括:回收所述下游插件的输入数据占用的内存。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:响应于多线程冲突的指令,调用多线程冲突解决功能函数。
9.一种数据传输与内存管理的装置,特征在于,包括:
第一识别单元,用于基于第一插件的第一连接器识别参数,将所述第一插件识别为上游插件;
第一获取单元,用于获取最大申请内存块数量的指定命令;
接收单元,用于接收所述上游插件的内存申请,所申请的内存用于存放所述上游插件的输出数据;以及
响应单元,用于基于所述最大申请内存块数量对所述上游插件的申请做出响应,
其中,所述装置还包括:
第二识别单元,用于基于第二插件的第二连接器识别参数,将所述第二插件识别为下游插件;
第二获取单元,用于获取所述下游插件的数据输入申请;以及
传输单元,用于基于所述数据输入申请,将数据传输至所述下游插件;
其中,最大申请内存块数量为系统可分配给连接器管理的内存的最大数量。
10.根据权利要求9所述的装置,其特征在于,所述响应单元包括:
比较子单元,用于将所述上游插件申请的内存数量与已占用内存数量之和与所述最大申请内存块数量进行比较;以及
第一内存分配子单元,用于响应于所述上游插件申请的内存数量与已占用内存数量之和小于等于所述最大申请内存块数量的比较结果,为所述上游插件分配所申请的内存数量。
11.根据权利要求10所述的装置,其特征在于,所述响应单元还包括:
第二内存分配子单元,用于响应于所述上游插件申请的内存数量与已占用内存数量之和大于所述最大申请内存块数量的比较结果,等待从已占用的内存中释放的内存,并在所述上游插件申请的内存数量与更新的已占用内存数量之和小于等于所述最大申请内存块数量时,为上游插件分配所申请的内存数量。
12.根据权利要求10所述的装置,其特征在于,所述第一内存分配子单元用于:
响应于空闲内存数量满足所述上游插件的内存申请数量,直接将所述空闲内存分配给上游插件;以及/或者
响应于空闲内存数量不满足所述上游插件的内存申请数量,申请内存并将申请到的内存分配给所述上游插件。
13.根据权利要求9所述的装置,其特征在于,所述传输单元包括:
判断子单元,用于判断内存中是否已经存放了来自所述上游插件的输出数据;
第一传递子单元,用于响应于已经存放了来自所述上游插件的输出数据判断结果,将输出数据传递给所述下游插件;以及/或者
第二传递子单元,用于响应于未存放来自所述上游插件的输出数据判断结果,等待来自上游插件的输出数据,并在收到来自所述上游插件的输出数据时,将输出数据传递给所述下游插件。
14.根据权利要求9所述的装置,其特征在于,还包括:第一内存回收单元,用于回收所述上游插件占用的内存。
15.根据权利要求9所述的装置,其特征在于,还包括:第二内存回收单元,用于回收所述下游插件的输入数据占用的内存。
16.根据权利要求9所述的装置,其特征在于,还包括:调用单元,用于响应于多线程冲突的指令,调用多线程冲突解决功能函数。
17.一种电子设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1-8任一所述的方法。
18.一种计算机可读存储介质,其特征在于,其存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行如权利要求1-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910738338.XA CN110489246B (zh) | 2019-08-12 | 2019-08-12 | 数据传输与内存管理方法、装置以及相关产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910738338.XA CN110489246B (zh) | 2019-08-12 | 2019-08-12 | 数据传输与内存管理方法、装置以及相关产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110489246A CN110489246A (zh) | 2019-11-22 |
CN110489246B true CN110489246B (zh) | 2022-06-07 |
Family
ID=68550767
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910738338.XA Active CN110489246B (zh) | 2019-08-12 | 2019-08-12 | 数据传输与内存管理方法、装置以及相关产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110489246B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111814971B (zh) * | 2020-06-30 | 2022-08-05 | 杭州国芯科技股份有限公司 | 一种神经网络的内存分配方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013400A (zh) * | 2007-01-30 | 2007-08-08 | 金蝶软件(中国)有限公司 | 一种在内存中缓存数据的方法及装置 |
CN103942150A (zh) * | 2014-04-01 | 2014-07-23 | 上海网达软件股份有限公司 | 一种用于实时流媒体传输系统的内存管理方法 |
CN105978997A (zh) * | 2016-06-24 | 2016-09-28 | 北京百度网讯科技有限公司 | 数据传输方法和系统 |
CN108833477A (zh) * | 2018-05-16 | 2018-11-16 | 百度在线网络技术(北京)有限公司 | 基于共享内存的消息传输方法、系统和装置 |
CN109067666A (zh) * | 2018-10-30 | 2018-12-21 | 新华三技术有限公司 | 一种报文传输的方法及装置 |
CN109088933A (zh) * | 2018-08-21 | 2018-12-25 | 中国平安人寿保险股份有限公司 | 大批量名单传送方法、获取方法及相应的装置、电子设备 |
CN109560949A (zh) * | 2017-09-26 | 2019-04-02 | 杭州海康威视系统技术有限公司 | 一种数据处理方法及管理服务器、业务设备 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3991724B2 (ja) * | 2002-03-12 | 2007-10-17 | ヤマハ株式会社 | データ処理装置およびコンピュータプログラム |
FR2972884A1 (fr) * | 2011-03-15 | 2012-09-21 | France Telecom | Procede de communication dans un reseau de communication avec acheminement par nom |
TW201241635A (en) * | 2011-04-01 | 2012-10-16 | Etron Technology Inc | Connector applied to a portable device and method of connecting a portable device with an external device |
CN105224297B (zh) * | 2014-06-24 | 2018-08-07 | 深圳市茁壮网络股份有限公司 | 基于中间件插件框架的插件内存资源控制方法及客户端 |
CN106201742B (zh) * | 2016-07-04 | 2019-09-20 | 东软医疗系统股份有限公司 | 一种共享内存管理方法、装置及系统 |
-
2019
- 2019-08-12 CN CN201910738338.XA patent/CN110489246B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013400A (zh) * | 2007-01-30 | 2007-08-08 | 金蝶软件(中国)有限公司 | 一种在内存中缓存数据的方法及装置 |
CN103942150A (zh) * | 2014-04-01 | 2014-07-23 | 上海网达软件股份有限公司 | 一种用于实时流媒体传输系统的内存管理方法 |
CN105978997A (zh) * | 2016-06-24 | 2016-09-28 | 北京百度网讯科技有限公司 | 数据传输方法和系统 |
CN109560949A (zh) * | 2017-09-26 | 2019-04-02 | 杭州海康威视系统技术有限公司 | 一种数据处理方法及管理服务器、业务设备 |
CN108833477A (zh) * | 2018-05-16 | 2018-11-16 | 百度在线网络技术(北京)有限公司 | 基于共享内存的消息传输方法、系统和装置 |
CN109088933A (zh) * | 2018-08-21 | 2018-12-25 | 中国平安人寿保险股份有限公司 | 大批量名单传送方法、获取方法及相应的装置、电子设备 |
CN109067666A (zh) * | 2018-10-30 | 2018-12-21 | 新华三技术有限公司 | 一种报文传输的方法及装置 |
Non-Patent Citations (2)
Title |
---|
Exploiting Stream Request Locality to Improve Query Throughput of a Data Integration System;Lee, Rubao;《IEEE TRANSACTIONS ON COMPUTERS》;20091031;第58卷(第10期);第1356-1368页 * |
用于机器人操作系统的消息传输方法和装置;冯靖超;《科技资讯》;20170222;第14卷(第32期);第188页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110489246A (zh) | 2019-11-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200328984A1 (en) | Method and apparatus for allocating resource | |
US20140282626A1 (en) | Processing of application programming interface traffic | |
CN109241178A (zh) | 管理存储空间的方法和装置 | |
US9213560B2 (en) | Affinity of virtual processor dispatching | |
CN112463375A (zh) | 一种数据处理的方法和装置 | |
CN101221517A (zh) | 在数据处理系统的分区之间交易资源的装置、系统和方法 | |
CN110096388A (zh) | 一种数据备份的方法、装置及计算机存储介质 | |
CN112214313A (zh) | 内存分配方法及相关设备 | |
CN105786603A (zh) | 一种基于分布式的高并发业务处理系统及方法 | |
CN110489246B (zh) | 数据传输与内存管理方法、装置以及相关产品 | |
CN111813541B (zh) | 一种任务调度方法、装置、介质和设备 | |
CN111143063B (zh) | 任务的资源预约方法及装置 | |
CN116578410A (zh) | 资源管理方法、装置、计算机设备和存储介质 | |
US20090158284A1 (en) | System and method of processing sender requests for remote replication | |
CN115564635A (zh) | 一种gpu资源调度方法、装置、电子设备及存储介质 | |
CN111090520B (zh) | 独占资源的用户分配方法、装置、电子设备及存储介质 | |
CN112114959B (zh) | 资源调度方法、分布式系统、计算机设备和存储介质 | |
CN110120963A (zh) | 一种数据处理方法、装置、设备和机器可读介质 | |
CN114679495B (zh) | 一种资源服务操作请求的调度编排方法和调度执行方法 | |
CN111625358A (zh) | 一种资源分配方法、装置、电子设备及存储介质 | |
CN110472977A (zh) | 一种区块链的交易记录生成方法及相关设备 | |
JP7087402B2 (ja) | 処理装置、処理システム、及びプログラム | |
CN110896564B (zh) | 资源的分配方法及装置 | |
CN116599917B (zh) | 网口确定方法、装置、设备及存储介质 | |
CN111611193B (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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: Room 644, scientific research complex building, No. 6, South Road, Academy of Sciences, Haidian District, Beijing 100086 Applicant after: Zhongke Cambrian Technology Co.,Ltd. Address before: Room 644, scientific research complex building, No. 6, South Road, Academy of Sciences, Haidian District, Beijing 100086 Applicant before: Beijing Zhongke Cambrian Technology Co., Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |