CN108733344A - 数据读写方法、装置以及环形队列 - Google Patents

数据读写方法、装置以及环形队列 Download PDF

Info

Publication number
CN108733344A
CN108733344A CN201810525547.1A CN201810525547A CN108733344A CN 108733344 A CN108733344 A CN 108733344A CN 201810525547 A CN201810525547 A CN 201810525547A CN 108733344 A CN108733344 A CN 108733344A
Authority
CN
China
Prior art keywords
queue
data
deviation post
write pointer
read
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.)
Granted
Application number
CN201810525547.1A
Other languages
English (en)
Other versions
CN108733344B (zh
Inventor
李昭早
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Autel Intelligent Aviation Technology Co Ltd
Original Assignee
Shenzhen Autel Intelligent Aviation Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Autel Intelligent Aviation Technology Co Ltd filed Critical Shenzhen Autel Intelligent Aviation Technology Co Ltd
Priority to CN201810525547.1A priority Critical patent/CN108733344B/zh
Priority to PCT/CN2018/102757 priority patent/WO2019227724A1/zh
Priority to EP18921150.1A priority patent/EP3786789A4/en
Publication of CN108733344A publication Critical patent/CN108733344A/zh
Priority to US17/103,143 priority patent/US11500586B2/en
Priority to US18/046,364 priority patent/US20230054884A1/en
Application granted granted Critical
Publication of CN108733344B publication Critical patent/CN108733344B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5016Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/16Multiplexed systems, i.e. using two or more similar devices which are alternately accessed for enqueue and dequeue operations, e.g. ping-pong buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Information Transfer Systems (AREA)

Abstract

本发明提供一种数据读写方法、装置以及环形队列,该方法,包括:从环形队列的队列头中获取写指针的偏移位置;根据所述写指针的偏移位置确定读指针的偏移位置;根据所述读指针的偏移位置,从所述环形队列中读取数据。实现了共享内存的单输入多输出,使得多个读线程可以并行从环形队列中读取数据,从而有效提高了数据的读写效率,降低内存的消耗。

Description

数据读写方法、装置以及环形队列
技术领域
本发明涉及数据存储技术领域,尤其涉及一种数据读写方法、装置以及环形队列。
背景技术
队列就是一个能够实现“先进先出”(first in first out,FIFO)的存储结构。队列分为普通队列和环形队列。普通队列一般由数组构成,按照先进先出的处理方式进行数据的存取。内存上没有环形的结构,因此环形队列实上是数组的线性空间来实现。
环列队列在逻辑上是将数组元素q[0]与q[MAXN-1]连接,形成一个存放队列的环形空间。为了方便读写,还要用数组下标来指明队列的读写位置。例如head/tail,其中head指向可以读的位置,tail指向可以写的位置。
虽然,环形队列提高了数据的存取效率,但是现有的环形队列只能支持数据的单输入单输出。当存在多个并发输出的场景时,需要开辟多个环形队列,内存消耗大,数据传输效率低下。
发明内容
本发明提供一种数据读写方法、装置以及环形队列,以实现多个读线程可以同时从环形队列中读取数据,从而有效提高了数据的读写效率,降低内存的消耗。
第一方面,本发明实施例提供一种数据读写方法,包括:
从环形队列的队列头中获取写指针的偏移位置;
根据所述写指针的偏移位置确定读指针的偏移位置;
根据所述读指针的偏移位置,从所述环形队列中读取数据。
可选地,所述从环形队列的队列头中获取写指针的偏移位置,包括:
至少2个读线程从环形队列的队列头中获取写指针的偏移位置。
可选地,所述至少2个读线程属于一个进程;或者,
所述至少2个读线程分别属于一个进程;或者,
所述至少2个读线程分别由一个处理器运行;或者,
所述至少2个读线程由一个处理器运行。
可选地,所述根据所述写指针的偏移位置确定读指针的偏移位置,包括:
将所述写指针的偏移位置作为所述读指针的偏移位置。
可选地,所述根据所述读指针的偏移位置,从所述环形队列中读取数据,包括:
根据所述读指针的偏移位置,查找到所述环形队列中的一帧;
读取所述帧的帧头和帧数据。
可选地,所述从所述环形队列中读取数据之后,所述方法还包括:
判断所述环形队列的队列头中的写指针的偏移位置是否更新;
若为是,则根据所述写指针更新后的偏移位置,再次从所述环形队列中读取数据。
可选地,所述判断所述环形队列的队列头中的写指针的偏移位置是否更新,包括:
判断所述环形队列的队列头中的写指针对应的帧序号是否更新;
若为是,则确定所述写指针的偏移位置已更新。
可选地,所述判断所述环形队列的队列头中的写指针对应的帧序号是否更新,包括:
更新所述读指针对应的帧序号;
获取所述环形队列的队列头中所述写指针对应的帧序号;
判断更新后的读指针对应的帧序号是否小于所述写指针对应的帧序号;
若为是,确定所述环形队列的队列头总的写指针对应的帧序号已更新。
可选地,所述判断所述环形队列的队列头中的写指针的偏移位置是否更新,包括:
再次获取从所述环形队列的队列头中的写指针的偏移位置;
判断再次获取的写指针的偏移位置是否与上次获取的写指针的偏移位置相同;
若不同,确定所述环形队列的队列头中的写指针的偏移位置已更新。
第二方面,本发明实施例提供一种数据读写方法,包括:
当获取一帧待写入数据时,从环形队列的队列头中获取写指针的偏移位置;
根据所述写指针的偏移位置,将所述待写入数据写入所述环形队列中;
更新所述队列头中的写指针的偏移位置。
可选地,所述方法还包括:
根据所述写指针的偏移位置和所述待写入数据的大小,判断所述环形队列是否已满;
若为是,将所述写指针的偏移位置更改为所述环形队列的第一个存储空间所在位置。
可选地,所述根据所述写指针的偏移位置和所述待写入数据的大小,判断所述环形队列是否已满,包括:
判断所述写指针的偏移位置与所述待写入数据对应的帧的帧头和帧数据的大小之和是否大于或等于所述环形队列的大小;
若是,确定所述环形队列已满。
可选地,所述根据所述写指针的偏移位置,将所述待写入数据写入所述环形队列中,包括:
根据所述写指针的偏移位置,确定所述环形队列中的一帧存储空间;
将所述待写入数据的相关信息写入所述存储空间的帧头中,并将所述待写入数据写入所述存储空间的帧数据中。
可选地,所述根据所述写指针的偏移位置,将所述待写入数据写入所述环形队列中之后,所述方法还包括:
更新所述队列头中的写指针对应的帧序号。
第三方面,本发明实施例提供一种环形队列,包括:
队列头以及帧队列;
其中,所述队列头包括写指针的偏移位置;
所述帧队列中的一帧存储空间包括帧头和帧数据。
可选地,所述队列头还包括所述环形队列的大小。
可选地,所述队列头还包括所述写指针对应的帧序号。
可选地,所述帧头包括所述帧数据的长度、所述帧数据对应的帧序号以及偏移位置。
第四方面,本发明实施例提供一种数据读写装置,包括:
获取模块,用于从环形队列的队列头中获取写指针的偏移位置;
确定模块,用于根据所述写指针的偏移位置确定读指针的偏移位置;
读取模块,用于根据所述读指针的偏移位置,从所述环形队列中读取数据。
可选地,所述获取模块,具体用于:
通过至少2个读线程从环形队列的队列头中获取写指针的偏移位置。
可选地,所述至少2个读线程属于一个进程;或者,
所述至少2个读线程分别属于一个进程;或者,
所述至少2个读线程分别由一个处理器运行;或者,
所述至少2个读线程由一个处理器运行。
可选地,所述确定模块,具体用于:
将所述写指针的偏移位置作为所述读指针的偏移位置。
可选地,所述读取模块,具体用于:
根据所述读指针的偏移位置,查找到所述环形队列中的一帧;
读取所述帧的帧头和帧数据。
可选地,所述装置还包括:
判断模块,用于在从所述环形队列中读取数据之后,判断所述环形队列的队列头中的写指针的偏移位置是否更新;
若为是,则根据所述写指针更新后的偏移位置,再次从所述环形队列中读取数据。
可选地,所述判断所述环形队列的队列头中的写指针的偏移位置是否更新,包括:
判断所述环形队列的队列头中的写指针对应的帧序号是否更新;
若为是,则确定所述写指针的偏移位置已更新。
可选地,所述判断所述环形队列的队列头中的写指针对应的帧序号是否更新,包括:
更新所述读指针对应的帧序号;
获取所述环形队列的队列头中所述写指针对应的帧序号;
判断更新后的读指针对应的帧序号是否小于所述写指针对应的帧序号;
若为是,确定所述环形队列的队列头总的写指针对应的帧序号已更新。
可选地,所述判断所述环形队列的队列头中的写指针的偏移位置是否更新,包括:
再次获取从所述环形队列的队列头中的写指针的偏移位置;
判断再次获取的写指针的偏移位置是否与上次获取的写指针的偏移位置相同;
若不同,确定所述环形队列的队列头中的写指针的偏移位置已更新。
第五方面,本发明实施例提供一种数据读写装置,包括:
获取模块,用于在获取一帧待写入数据时,从环形队列的队列头中获取写指针的偏移位置;
写入模块,用于根据所述写指针的偏移位置,将所述待写入数据写入所述环形队列中;
更新模块,用于更新所述队列头中的写指针的偏移位置。
可选地,所述装置还包括:
判断模块,用于根据所述写指针的偏移位置和所述待写入数据的大小,判断所述环形队列是否已满;
若为是,将所述写指针的偏移位置更改为所述环形队列的第一个存储空间所在位置。
可选地,所述根据所述写指针的偏移位置和所述待写入数据的大小,判断所述环形队列是否已满,包括:
判断所述写指针的偏移位置与所述待写入数据对应的帧的帧头和帧数据的大小之和是否大于或等于所述环形队列的大小;
若是,确定所述环形队列已满。
可选地,所述写入模块,具体用于:
根据所述写指针的偏移位置,确定所述环形队列中的一帧存储空间;
将所述待写入数据的相关信息写入所述存储空间的帧头中,并将所述待写入数据写入所述存储空间的帧数据中。
可选地,所述更新模块,还用于在根据所述写指针的偏移位置,将所述待写入数据写入所述环形队列中之后,更新所述队列头中的写指针对应的帧序号。
第六方面,本发明实施例提供一种数据读写装置,包括:
存储器,用于存储读线程;
与所述存储器耦合的处理器,用于调用所述存储器中存储的读线程,以实现如第一方面中任一项所述的数据读写方法。
第七方面,本发明实施例提供一种数据读写装置,包括:
存储器,用于存储写线程;
与所述存储器耦合的处理器,用于调用所述存储器中存储的写线程,以实现如第二方面中任一项所述的数据读写方法。
第八方面,本发明实施例提供一种计算机可读存储介质,包括:指令,当其在计算机上运行时,使得计算机执行第一方面和/或第二方面中任一所述的方法。
本发明提供的数据读写方法、装置以及环形队列,通过从环形队列的队列头中获取写指针的偏移位置;根据所述写指针的偏移位置确定读指针的偏移位置;根据所述读指针的偏移位置,从所述环形队列中读取数据。从而使得多个读线程可以并行从环形队列中读取数据,从而有效提高了数据的读写效率,降低内存的消耗。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的环形队列的一应用场景的示意图;
图2为本发明实施例一提供的数据读写方法的流程图;
图3为环形队列的结构示意图;
图4为对环形队列中数据的读写的一种应用场景的示意图;
图5为本发明实施例二提供的数据读写方法的流程图;
图6为不同处理器之间的数据传输原理示意图;
图7为本发明实施例三提供的数据读写装置的结构示意图;
图8为本发明实施例四提供的数据读写装置的结构示意图;
图9为本发明实施例五提供的数据读写设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
下面以具体地实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
以下,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解:
1)环形队列,是一个首尾相连的FIFO的数据结构,采用数组的线性空间来实现,并能很快判断出队列状态是满或者空,从而实现数据的快速存取。环形队列原理:当数据到了队列尾部时,它将转回到0位置来处理。这个的转回是通过取模操作来执行的。因此,环列队列在逻辑上是将数组元素q[0]与q[MAXN-1]连接,形成一个存放队列的环形空间。为了方便读写,还要用数组下标来指明队列的读写位置。例如head/tail,其中head指向可以读的位置,tail指向可以写的位置。
2)环形队列状态判断,是通过在类里面定义队列容量和队列长度来判断的。在判断队列是否为空时,通过判断队列长度是否为0,如果是则为空。在判断队列是否为满时,通过判断队列长度是否等于队列容量,如果是则为满。
3)共享内存,是进程间通信中最简单的方式之一。共享内存允许两个或更多进程访问同一块内存,就如同malloc()函数向不同进程返回了指向同一个物理内存区域的指针。若一个进程正在向共享内存区写数据,则在它做完这一步操作前,其他进程无法对该共享内存区执行读写操作。
本申请实施例提供的数据读写方法是针对环形队列,该环形队列可以由共同内存实现,在此情况下,该环形队列可以实现由一个进程的不同线程读写,也可以由多个进程读写,甚至可以由不同的处理器或不同芯片读写。
本申请实施例提供一种环形队列,该环形队列具备以下数据结构。通过以下数据结构,该环形队列可以实现同时对其进行读写操作,也可以实现多个读线程并行读该环形队列的数据。
图3为环形队列的结构示意图,图4为对环形队列中数据的读写的一种应用场景的示意图。如图3或图4所示,该环形队列包括:队列头以及帧队列;在队列头中包含有写指针的偏移位置,进一步地,该队列头还可以包括该环形队列的总大小,以及写指针所指向的帧序号。在帧队列的存储空间中存储有帧头、帧数据。其中,在帧头中可以存储有帧数据的长度、所述帧数据对应的帧序号以及偏移位置。其中,每个帧数据中可以用于存储一帧图像数据。帧头中所存储的帧数据的长度可以理解为帧数据的存储空间的大小,或者是存储在帧数据中的图像数据的数据大小。
其中,写指针的偏移位置是指写指针所指向的帧队列中某一帧的存储地址。如图3所示,POS1~POS8用于表示各帧的存储地址。相应的,写指针对应的帧序号即为该帧的帧序号。如图3所示,No1~No8即为各帧数据的帧序号,该帧序号可以用于表示帧数据的获取时间顺序,依次获取的每帧数据,如每帧图像数据,可以按照帧序号由小至大的顺序将依次获取的每帧图像数据写入帧队列中各帧序号对应的存储空间中。其中,帧序号对应的一帧存储空间可以用于存储一帧图像数据。当写线程数据写入最后一帧,如图3中的NO8帧中时,下次再写入数据时,则从NO1帧开始写入。如图3所示,Len可以用于表示每帧存储的数据的大小。如,每帧存储的图像数据的数据长度或数据大小等。如图3所示,环形队列的队列头中存储有环形队列的总容量值(Size),写指针偏移值(Write_Pos),写数据序号(Write_No)。
具体地,写线程在将数据写入帧队列后,可以更新队列头中的写指针的偏移位置和写指针对应的帧序号。读线程可以从队列头中获取写指针的偏移位置,进而获知数据存储地址。这种方式节省了写线程与读线程的通信成本,同时,也可以支持多个读线程并行读取数据,并且由于读线程通过队列头中获取的写指针的偏移地址,是已经写入的数据的存储地址,避免了写线程与读线程操作同一个存储空间,因此,写线程所操作的帧队列中的存储空间与读线程所操作的帧队列中的存储空间隔离,进而实现了写线程和读线程可以同时对一个环形队列进行操作。
具体地,可以从环形队列的队列头中获取到写指针的偏移位置,然后根据该写指针的偏移位置确定读指针的偏移位置。当获知读指针的偏移位置后,即可从该环形队列中读取出数据。采用上述的环形队列结构,可以支持2个及以上的读线程并行从该环形队列中读取出数据。具体实现方式可以参见下述实施例。
在此,本申请实施例提供了一种应用该环形队列的系统。系统也可以理解为应用场景。其中,该系统用于传输并处理图像采集装置所采集的图像数据。例如,该系统可以被配置于无人飞行器中。
图1为本发明提供的环形队列的一应用场景的示意图,如图1所示,该应用场景可以适用于无人飞行器(Unmanned Aerial Vehicle,UAV)中。
其中线程1可以作为图像采集线程,其可以由图像采集装置中的处理器执行,线程1可以将采集到的图像数据,如YUV420图像数据,写入环形队列1,即相对于环形队列1,线程1为写线程。环形队列1基于上述数据结构,该环形队列1支持线程2~线程5对其进行并行读取,并支持线程1对环形队列1进行写操作时,线程2~线程5中的一个或多个线程对环形队列1进行读操作。即相对于环形队列1,线程2~线程5为读线程。其中,线程2用于HDMI显示,线程3用于对读取的图像数据进行第一类型的编码,如H264/H265编码。线程4用于对读取的数据进行第二类型的编码,如Jpeg编码,对图像数据进行Jpeg编码后,可以将编码后的图像数据进行本地存储;例如,存储至飞行器中的SD卡(Secure Digital Memory Card,安全数位卡)或TF卡
(TranFlash,移动存储卡)中。线程5用于对图像数据进行处理,如进行图像缩小(如将图像缩小至VGA大小),进行处理后的图像数据可以进一步地进行视觉处理等,在此不予限定。
进一步地,线程3可以将编码后的图像数据写入环形队列2,即相对于环形队列2,线程3为写线程。环形队列2基于上述数据结构,环形队列2支持线程6~线程7对其进行并行读取,并支持线程3对环形队列2进行写操作时,线程6和/或线程7对环形队列2进行读操作。其中,线程6用于录像,即从第二环形队列中取出多帧图像数据进行MP4或MOV格式的打包,以得到视频数据,可以将该视频数据进一步地存储在存储器中,即实现录像。线程7用于传输图像数据,将该图像数据传输至与飞行器连接的终端上进行实时显示或在终端中存储。
图1中采用了单输入多输出环形队列,在多个输出场景时可以降低内存消耗。码流视频图像大数据采用这种方式传输可以提升处理效率,降低传输的延时,并且各个读数据流程各自独立,互不干扰。比如图传卡顿时并不影响录像的过程,比如消耗CPU特别大的视觉处理和H264/H265编码根本不影响HDMI超低延时的显示。采用本发明提供的内存管理方法,实现了数据的单输入多输出,从而有效提高了数据的传输效率,降低内存损耗。
基于所介绍的环形队列的数据结构以及上述应用场景。下面将结合附图,介绍针对上述环形队列的读写方式。
首先介绍本申请实施例提供的读取该环形队列中的数据的方式。
图2为本发明实施例一提供的数据读写方法的流程图,如图2所示,本实施例中的方法可以包括:
S101、从环形队列的队列头中获取写指针的偏移位置。
示例性地,读线程在被处理器执行时,可以实现从环形队列的队列头中获取写指针的偏移位置。
具体地,读线程可以监测队列头中写指针的偏移位置是否变化,若变化,则表明有新数据写入环形队列,即触发获取写指针的偏移位置。或者,读线程在需要读取数据的情况下,从环形队列的队列头中获取写指针的偏移位置。
具体地,读线程可以周期性地获取写指针的偏移位置,通过比对写指针的偏移位置是否相同,来判断是否有新数据写入。或者,读线程在触发条件下,如接收到处理器中其他线程的调用指令时,获取写指针的偏移位置。
S102、根据所述写指针的偏移位置确定读指针的偏移位置。
本实施例中,可以通过获取队列头中的写指针的偏移位置;根据所述写指针偏移值,即写指针的偏移位置,确定读指针所指示的位置,即读指针的偏移位置。具体地,可以将所述写指针的偏移位置作为所述读指针的偏移位置。假设当前的写指针偏移值为Pos5,此时,所有读线程均可以根据Pos5这个偏移值,确定当前写入的数据在环形队列中的位置,因此可以将读指针指向Pos5这个偏移值所指示的位置。当确定读指针指示的位置之后,读线程即可从读指针指示的位置处读取数据。需要说明的是,读线程可以是不同进程,也可以是来自不同处理器、不同芯片的线程;且各个读线程之间的读取动作相互独立,互不影响。
S103、根据所述读指针的偏移位置,从所述环形队列中读取数据。
本实施例中,可以根据所述读指针的偏移位置,查找到所述环形队列中的一帧;读取所述帧的帧头和帧数据。
具体地,读线程可以读取该帧的帧头,获知该帧数据的帧序号以及该帧数据的数据大小。进而,可以根据数据大小确定所读取的数据的终点。
可选地,所述从所述环形队列中读取数据之后,所述方法还包括:
判断所述环形队列的队列头中的写指针的偏移位置是否更新;若为是,则根据所述写指针更新后的偏移位置,再次从所述环形队列中读取数据。
本实施例中,可以判断所述环形队列的队列头中的写指针对应的帧序号是否更新,若为是,则确定所述写指针的偏移位置已更新。
进一步地,可以通过更新所述读指针对应的帧序号;获取所述环形队列的队列头中所述写指针对应的帧序号;判断更新后的读指针对应的帧序号是否小于所述写指针对应的帧序号;若为是,确定所述环形队列的队列头中的写指针对应的帧序号已更新。也可以再次获取从所述环形队列的队列头中的写指针的偏移位置;判断再次获取的写指针的偏移位置是否与上次获取的写指针的偏移位置相同;若不同,确定所述环形队列的队列头中的写指针的偏移位置已更新。
具体地,当读线程从读指针指示的位置处读取出一帧数据之后,该读线程中记录的读取数据帧次数的计数值会被更新。该计数值也可以理解为是读指针的帧序号。
具体地,可以在读取数据帧之后,令所述计数值自增1。在获取环形队列的读指针位置之前,首先获取当前队列头中的写数据序号,即写指针的指针号;判断所述计数值是否小于所述写数据序号,若所述计数值大于或等于所述写数据序号,则表明写线程上一次写入的数据已被读取完,则重新获取队列头中的写数据序号。若所述计数值小于所述写数据序号,则获取环形队列的读指针,继续进行数据读取。其中,所述写数据序号用于统计环形队列中写入数据帧的次数;每当写线程在环形队列中写入数据帧之后,写数据序号会自增1。
本实施例中,通过计数值来统计读线程对数据帧的读取次数,原则上,任何一个读线程的读取次数均应该小于写数据序号。通过在获取读指针之前,首先判断计数值和写数据序号的大小,可以避免在环形队列进行写数据操作时,读线程对正在写入的数据帧的读取操作。
本实施例,通过从环形队列的队列头中获取写指针的偏移位置;根据所述写指针的偏移位置确定读指针的偏移位置;根据所述读指针的偏移位置,从所述环形队列中读取数据。从而使得多个读线程可以同时从环形队列中读取数据,从而有效提高了数据的读写效率,降低内存的消耗。
下面介绍本申请实施例提供的将数据写入该环形队列的方式。
图5为本发明实施例二提供的数据读写方法的流程图,如图5所示,本实施例中的方法可以包括:
S201、当获取一帧待写入数据时,从环形队列的队列头中获取写指针的偏移位置。
本实施例中,从环形队列的队列头中获取写指针偏移值,所述写指针偏移值指示了环形队列当前可供存储的存储区域。本实施例中,数据帧的写入顺序是从队列头侧开始顺次按照环形队列的存储区域写入的,因此,数据帧的帧号是顺次累积的,例如帧号No的值依次为:1、2、3….。
S202、根据所述写指针的偏移位置,将所述待写入数据写入所述环形队列中。
本实施例中,可以根据所述写指针的偏移位置,确定所述环形队列中的一帧存储空间;将所述待写入数据的相关信息写入所述存储空间的帧头中,并将所述待写入数据写入所述存储空间的帧数据中。当确定写指针偏移值时,即可确定当前待写入数据帧在环形队列中的写入位置。其中,待写入数据的相关信息包括:待写入数据帧的总长度,所述待写入数据帧的总长度是指:待写入数据帧的帧头长度与帧数据长度之和;所述帧头长度为:存储帧号的空间长度、存储帧长度的空间长度,以及存储偏移值的空间长度之和。
可选地,所述方法还包括:
根据所述写指针的偏移位置和所述待写入数据的大小,判断所述环形队列是否已满;
若为是,将所述写指针的偏移位置更改为所述环形队列的第一个存储空间所在位置。
本实施例中,可以通过判断所述写指针的偏移位置与所述待写入数据对应的帧的帧头和帧数据的大小之和是否大于或等于所述环形队列的大小;若是,确定所述环形队列已满。
具体地,在写入数据帧之前,首先判断写指针偏移值与待写入数据帧的总长度之和是否小于环形队列的总容量值。据此可知,环形队列的存储状态,避免写入的数据帧溢出的情况。当写指针偏移值与待写入数据帧的总长度之和大于或等于环形队列的总容量值,则说明环形队列为满的状态,若写入数据帧,则会造成数据帧溢出。当写指针偏移值与待写入数据帧的总长度之和小于环形队列的总容量值,则说明环形队列未满,可以正常写入数据帧。
本实施例中,在写指针偏移值与待写入数据帧的总长度之和大于或等于环形队列的总容量值时,将所述写指针偏移值变更为队列头长度,此时,环形队列中存储的数据帧被清空,待写入的数据帧从队列头侧的存储区域开始顺次写入。在写指针偏移值与待写入数据帧的总长度之和小于环形队列的总容量值时,根据所述写指针偏移值所指示的写入位置,将所述待写入数据帧写入环形队列中的写入位置。
S203、更新所述队列头中的写指针的偏移位置。
本实施例中,在写指针偏移值与待写入数据帧的总长度之和大于或等于环形队列的总容量值时,将所述写指针偏移值变更为队列头长度,此时,环形队列中存储的数据帧被清空,待写入的数据帧从队列头侧的存储区域开始顺次写入。在写指针偏移值与待写入数据帧的总长度之和小于环形队列的总容量值时,根据所述写指针偏移值所指示的写入位置,将所述待写入数据帧写入环形队列中的写入位置。
本实施例中,当完成数据帧的写入操作之后,需要更新队列头中的写指针偏移值。可选地,可以将队列头中的写指针偏移值变更为:上一次写入数据时的写指针偏移值与当前待写入数据帧的总长度之和。更新队列头中的写数据序号。具体地,可以在数据帧写入之后,令所述写数据序号,即写指针的帧序号自增1。
本实施例,通过在获取一帧待写入数据时,从环形队列的队列头中获取写指针的偏移位置;根据所述写指针的偏移位置,将所述待写入数据写入所述环形队列中;更新所述队列头中的写指针的偏移位置。。从而使得多个读线程可以同时从环形队列中读取数据,从而有效提高了数据的读写效率,降低内存的消耗。。
图6为不同处理器之间的数据传输原理示意图,如图6所示,在双倍速率同步动态随机存储器(Double Data Rate,DDR)的起始物理地址PhyAddr大小为Size的一块连续区域作为共享内存,该共享区域构成一个环形队列。在第一处理器10中通过映射得到对应的虚拟地址VirAddr1,则VirAddr1开始大小为Size的区域可以理解为上述环形队列,写线程可以操作该环形队列写入数据。在第二处理器20中通过映射得到不同的虚拟地址VirAddr2,则VirAddr2开始大小为Size的区域可以理解为上述环形队列,读线程可以操作该环形队列读取数据。第一处理器10和第二处理器20之间就可以通过这个共享内存进行数据的传输,处理器不需要相互进行消息通知,即可完成数据的写入和读取。类似的,不同的进程、甚至不同的芯片,只要使用同一个物理DDR,就可以采用图6的技术方案进行高效率的数据传输。环形队列基于共享内存创建,因此,不仅可以实现多个线程的数据传输,也能实现多个进程、多个CPU处理器、多个芯片的大数据传输。
图6中的第一处理器10中通过映射得到对应的虚拟地址VirAddr1可以执行上述图4所示的技术方案,图6中的第二处理器20通过映射得到对应的虚拟地址VirAddr2可以执行上述图2所示的技术方案,具体实现过程和技术原理请参考图2、图5中的相关描述,此处不再赘述。
图7为本发明实施例三提供的数据读写装置的结构示意图,如图7所示,本实施例中的装置可以包括:
获取模块30,用于从环形队列的队列头中获取写指针的偏移位置;
确定模块40,用于根据所述写指针的偏移位置确定读指针的偏移位置;
读取模块50,用于根据所述读指针的偏移位置,从所述环形队列中读取数据。
可选地,所述获取模块30,具体用于:
通过至少2个读线程从环形队列的队列头中获取写指针的偏移位置。
可选地,所述至少2个读线程属于一个进程;或者,
所述至少2个读线程分别属于一个进程;或者,
所述至少2个读线程分别由一个处理器运行;或者,
所述至少2个读线程由一个处理器运行。
可选地,所述确定模块40,具体用于:
将所述写指针的偏移位置作为所述读指针的偏移位置。
可选地,所述读取模块50,具体用于:
根据所述读指针的偏移位置,查找到所述环形队列中的一帧;
读取所述帧的帧头和帧数据。
可选地,所述装置还包括:
判断模块60,用于在从所述环形队列中读取数据之后,判断所述环形队列的队列头中的写指针的偏移位置是否更新;
若为是,则根据所述写指针更新后的偏移位置,再次从所述环形队列中读取数据。
可选地,所述判断所述环形队列的队列头中的写指针的偏移位置是否更新,包括:
判断所述环形队列的队列头中的写指针对应的帧序号是否更新;
若为是,则确定所述写指针的偏移位置已更新。
可选地,所述判断所述环形队列的队列头中的写指针对应的帧序号是否更新,包括:
更新所述读指针对应的帧序号;
获取所述环形队列的队列头中所述写指针对应的帧序号;
判断更新后的读指针对应的帧序号是否小于所述写指针对应的帧序号;
若为是,确定所述环形队列的队列头总的写指针对应的帧序号已更新。
可选地,所述判断所述环形队列的队列头中的写指针的偏移位置是否更新,包括:
再次获取从所述环形队列的队列头中的写指针的偏移位置;
判断再次获取的写指针的偏移位置是否与上次获取的写指针的偏移位置相同;
若不同,确定所述环形队列的队列头中的写指针的偏移位置已更新。
本实施例可以执行上述图2所示的方法中的技术方案,其实现过程和技术效果与上述方法类似,此处不再赘述。
图8为本发明实施例四提供的数据读写装置的结构示意图,如图8所示,本实施例中的装置可以包括:
获取模块70,用于在获取一帧待写入数据时,从环形队列的队列头中获取写指针的偏移位置;
写入模块80,用于根据所述写指针的偏移位置,将所述待写入数据写入所述环形队列中;
更新模块90,用于更新所述队列头中的写指针的偏移位置。
可选地,所述装置还包括:
判断模块100,用于根据所述写指针的偏移位置和所述待写入数据的大小,判断所述环形队列是否已满;
若为是,将所述写指针的偏移位置更改为所述环形队列的第一个存储空间所在位置。
可选地,所述根据所述写指针的偏移位置和所述待写入数据的大小,判断所述环形队列是否已满,包括:
判断所述写指针的偏移位置与所述待写入数据对应的帧的帧头和帧数据的大小之和是否大于或等于所述环形队列的大小;
若是,确定所述环形队列已满。
可选地,所述写入模块80,具体用于:
根据所述写指针的偏移位置,确定所述环形队列中的一帧存储空间;
将所述待写入数据的相关信息写入所述存储空间的帧头中,并将所述待写入数据写入所述存储空间的帧数据中。
可选地,所述更新模块90,还用于在根据所述写指针的偏移位置,将所述待写入数据写入所述环形队列中之后,更新所述队列头中的写指针对应的帧序号。
本实施例可以执行上述图5所示的方法中的技术方案,其实现过程和技术效果与上述方法类似,此处不再赘述。
本发明实施例还提供一种环形队列,包括:
队列头以及帧队列;
其中,所述队列头包括写指针的偏移位置;
所述帧队列中的一帧存储空间包括帧头和帧数据。
可选地,所述队列头还包括所述环形队列的大小。
可选地,所述队列头还包括所述写指针对应的帧序号。
可选地,所述帧头包括所述帧数据的长度、所述帧数据对应的帧序号以及偏移位置。所述环形队列用于执行图2、图5中所述技术方案。
本实施例可以执行上述图2、图5所示的方法中的技术方案,其实现过程和技术效果与上述方法类似,此处不再赘述。
本发明实施例还提供一种应用于环形缓冲区的数据结构,包括:
队列头和帧队列;
其中,所述队列头包括所述环形缓冲区的大小信息,写指针偏移位置以及写指针对应的帧序号;
所述帧队列中的每一帧包括帧头和帧数据;
所述帧头包括所述帧数据的长度,所述帧在所述帧队列中的偏移位置以及所述帧的序号。
本实施例可以执行上述图2、图5所示的方法中的技术方案,其实现过程和技术效果与上述方法类似,此处不再赘述。
图9为本发明实施例五提供的数据读写设备的结构示意图,如图9所示,本实施例中的数据读写设备200包括:
处理器210以及存储器220;其中:
存储器220,用于存储计算机程序(如实现上述数据读写的应用程序、线程程序,如读线程或写线程,功能模块等)、计算机指令、数据等,上述的计算机程序、计算机指令、数据等可以分区存储在一个或多个存储器220中。并且上述的计算机程序、计算机指令、数据等可以被处理器210调用。
其中,存储器220可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random-access memory,缩写:RAM),如静态随机存取存储器(英文:staticrandom-access memory,缩写:SRAM),双倍数据率同步动态随机存取存储器(英文:DoubleData Rate Synchronous Dynamic Random Access Memory,缩写:DDR SDRAM)等;存储器也可以包括非易失性存储器(英文:non-volatile memory),例如快闪存储器(英文:flashmemory),硬盘(英文:hard disk drive,缩写:HDD)或固态硬盘(英文:solid-state drive,缩写:SSD);存储器220还可以包括上述种类的存储器的组合。
存储器220还可以用于存储上述环形队列的数据结构,以实现上述环形队列。当然,该环形队列还可以存储在其他存储空间中,在此不予限定。
处理器210,用于执行存储器存储的线程程序或计算机程序或指令,以实现上述实施例涉及的方法中的各个步骤。具体可以参见前面方法实施例中的相关描述。
其中,处理器210可以是中央处理器(英文:central processing unit,缩写:CPU),网络处理器(英文:network processor,缩写:NP),数据处理器,图像处理器,任务处理器等专用处理器中的一种或组合。
其中,处理器210还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(英文:application-specific integrated circuit,缩写:ASIC),可编程逻辑器件(英文:programmable logic device,缩写:PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(英文:complex programmable logic device,缩写:CPLD),现场可编程逻辑门阵列(英文:field-programmable gate array,缩写:FPGA),通用阵列逻辑(英文:generic arraylogic,缩写:GAL)或其任意组合。当然,处理器还可以包括单片机等硬件装置。
可选地,存储器220既可以是独立的,也可以跟处理器210集成在一起。
当所述存储器220是独立于处理器210之外的器件时,所述内存管理设备200还可以包括:
总线230,用于连接所述存储器220和处理器210。
此外,本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当至少一个处理器执行该计算机执行指令时,用实现上述各种可能的方法。
其中,计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于用户设备中。当然,处理器和存储介质也可以作为分立组件存在于通信设备中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (20)

1.一种数据读写方法,其特征在于,包括:
从环形队列的队列头中获取写指针的偏移位置;
根据所述写指针的偏移位置确定读指针的偏移位置;
根据所述读指针的偏移位置,从所述环形队列中读取数据。
2.根据权利要求1所述的方法,其特征在于,所述从环形队列的队列头中获取写指针的偏移位置,包括:
至少2个读线程从环形队列的队列头中获取写指针的偏移位置。
3.根据权利要求2所述的方法,其特征在于,
所述至少2个读线程属于一个进程;或者,
所述至少2个读线程分别属于一个进程;或者,
所述至少2个读线程分别由一个处理器运行;或者,
所述至少2个读线程由一个处理器运行。
4.根据权利要求1-3中任一项所述的方法,其特征在于,所述根据所述写指针的偏移位置确定读指针的偏移位置,包括:
将所述写指针的偏移位置作为所述读指针的偏移位置。
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述根据所述读指针的偏移位置,从所述环形队列中读取数据,包括:
根据所述读指针的偏移位置,查找到所述环形队列中的一帧;
读取所述帧的帧头和帧数据。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述从所述环形队列中读取数据之后,所述方法还包括:
判断所述环形队列的队列头中的写指针的偏移位置是否更新;
若为是,则根据所述写指针更新后的偏移位置,再次从所述环形队列中读取数据。
7.根据权利要求6所述的方法,其特征在于,所述判断所述环形队列的队列头中的写指针的偏移位置是否更新,包括:
判断所述环形队列的队列头中的写指针对应的帧序号是否更新;
若为是,则确定所述写指针的偏移位置已更新。
8.根据权利要求7所述的方法,其特征在于,所述判断所述环形队列的队列头中的写指针对应的帧序号是否更新,包括:
更新所述读指针对应的帧序号;
获取所述环形队列的队列头中所述写指针对应的帧序号;
判断更新后的读指针对应的帧序号是否小于所述写指针对应的帧序号;
若为是,确定所述环形队列的队列头总的写指针对应的帧序号已更新。
9.根据权利要求6所述的方法,其特征在于,所述判断所述环形队列的队列头中的写指针的偏移位置是否更新,包括:
再次获取从所述环形队列的队列头中的写指针的偏移位置;
判断再次获取的写指针的偏移位置是否与上次获取的写指针的偏移位置相同;
若不同,确定所述环形队列的队列头中的写指针的偏移位置已更新。
10.一种数据读写方法,其特征在于,包括:
当获取一帧待写入数据时,从环形队列的队列头中获取写指针的偏移位置;
根据所述写指针的偏移位置,将所述待写入数据写入所述环形队列中;
更新所述队列头中的写指针的偏移位置。
11.根据权利要求10所述的方法,其特征在于,所述方法还包括:
根据所述写指针的偏移位置和所述待写入数据的大小,判断所述环形队列是否已满;
若为是,将所述写指针的偏移位置更改为所述环形队列的第一个存储空间所在位置。
12.根据权利要求11所述的方法,其特征在于,所述根据所述写指针的偏移位置和所述待写入数据的大小,判断所述环形队列是否已满,包括:
判断所述写指针的偏移位置与所述待写入数据对应的帧的帧头和帧数据的大小之和是否大于或等于所述环形队列的大小;
若是,确定所述环形队列已满。
13.根据权利要求10-12中任一项所述的方法,其特征在于,所述根据所述写指针的偏移位置,将所述待写入数据写入所述环形队列中,包括:
根据所述写指针的偏移位置,确定所述环形队列中的一帧存储空间;
将所述待写入数据的相关信息写入所述存储空间的帧头中,并将所述待写入数据写入所述存储空间的帧数据中。
14.根据权利要求10-13任一项所述的方法,其特征在于,所述根据所述写指针的偏移位置,将所述待写入数据写入所述环形队列中之后,所述方法还包括:
更新所述队列头中的写指针对应的帧序号。
15.一种环形队列,其特征在于,包括:
队列头以及帧队列;
其中,所述队列头包括写指针的偏移位置;
所述帧队列中的一帧存储空间包括帧头和帧数据。
16.根据权利要求15所述的环形队列,其特征在于,所述队列头还包括所述环形队列的大小。
17.根据权利要求15或16所述的环形队列,其特征在于,所述队列头还包括所述写指针对应的帧序号。
18.根据权利要求15-17任一项所述的环形队列,其特征在于,所述帧头包括所述帧数据的长度、所述帧数据对应的帧序号以及偏移位置。
19.一种数据读写装置,其特征在于,包括:
存储器,用于存储读线程;
与所述存储器耦合的处理器,用于调用所述存储器中存储的读线程,以实现如权利要求1-9中任一项所述的数据读写方法。
20.一种数据读写装置,其特征在于,包括:
存储器,用于存储写线程;
与所述存储器耦合的处理器,用于调用所述存储器中存储的写线程,以实现如权利要求10-14中任一项所述的数据读写方法。
CN201810525547.1A 2018-05-28 2018-05-28 数据读写方法、装置以及环形队列 Active CN108733344B (zh)

Priority Applications (5)

Application Number Priority Date Filing Date Title
CN201810525547.1A CN108733344B (zh) 2018-05-28 2018-05-28 数据读写方法、装置以及环形队列
PCT/CN2018/102757 WO2019227724A1 (zh) 2018-05-28 2018-08-28 数据读写方法、装置以及环形队列
EP18921150.1A EP3786789A4 (en) 2018-05-28 2018-08-28 PROCESS AND DEVICE FOR READING / WRITING DATA, AND CIRCULAR WAITING QUEUE
US17/103,143 US11500586B2 (en) 2018-05-28 2020-11-24 Data read-write method and apparatus and circular queue
US18/046,364 US20230054884A1 (en) 2018-05-28 2022-10-13 Data read-write method and apparatus and circular queue

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810525547.1A CN108733344B (zh) 2018-05-28 2018-05-28 数据读写方法、装置以及环形队列

Publications (2)

Publication Number Publication Date
CN108733344A true CN108733344A (zh) 2018-11-02
CN108733344B CN108733344B (zh) 2023-07-04

Family

ID=63936451

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810525547.1A Active CN108733344B (zh) 2018-05-28 2018-05-28 数据读写方法、装置以及环形队列

Country Status (4)

Country Link
US (2) US11500586B2 (zh)
EP (1) EP3786789A4 (zh)
CN (1) CN108733344B (zh)
WO (1) WO2019227724A1 (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109631853A (zh) * 2018-12-29 2019-04-16 深圳市道通智能航空技术有限公司 一种深度图处理方法、装置和无人机
CN109753479A (zh) * 2018-12-28 2019-05-14 杭州迪普科技股份有限公司 一种数据下发方法及装置、设备、介质
CN110381331A (zh) * 2019-07-23 2019-10-25 深圳市道通智能航空技术有限公司 一种图像处理方法、装置、航拍设备及存储介质
CN110765209A (zh) * 2019-10-28 2020-02-07 机械工业仪器仪表综合技术经济研究所 数据读写处理方法及装置
CN112130765A (zh) * 2020-09-17 2020-12-25 智新控制系统有限公司 Eeprom数据读写方法及装置
CN112783421A (zh) * 2019-11-07 2021-05-11 北京京东尚科信息技术有限公司 一种基于环形缓冲区的异步消费方法和装置
CN112802514A (zh) * 2021-01-25 2021-05-14 长江存储科技有限责任公司 闪存存储器的操作方法及装置
CN115934023A (zh) * 2021-08-31 2023-04-07 华为技术有限公司 数据处理方法、数据处理装置以及相关设备
CN116204337A (zh) * 2023-03-03 2023-06-02 广州市易鸿智能装备有限公司 一种图像传输方法、装置、设备和计算机存储介质
CN117093541A (zh) * 2023-08-18 2023-11-21 北京天华星航科技有限公司 一种遥感数据的数据提取和归档系统
CN117407148A (zh) * 2022-07-08 2024-01-16 华为技术有限公司 数据写入方法、读取方法、装置、电子设备以及存储介质

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112148488A (zh) * 2020-09-22 2020-12-29 杭州电魂网络科技股份有限公司 一种基于多重循环缓存的消息处理方法及系统
CN112491979B (zh) 2020-11-12 2022-12-02 苏州浪潮智能科技有限公司 一种网卡数据包缓存管理方法、装置、终端及存储介质
CN113778518B (zh) * 2021-08-31 2024-03-26 中科曙光国际信息产业有限公司 数据处理方法、装置、计算机设备和存储介质
CN116431066B (zh) * 2023-03-21 2024-04-26 深圳市万翼数字技术有限公司 数据存储方法、装置、电子设备及存储介质

Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6145061A (en) * 1998-01-07 2000-11-07 Tandem Computers Incorporated Method of management of a circular queue for asynchronous access
US6314478B1 (en) * 1998-12-29 2001-11-06 Nec America, Inc. System for accessing a space appended to a circular queue after traversing an end of the queue and upon completion copying data back to the queue
US20040111540A1 (en) * 2002-12-10 2004-06-10 Narad Charles E. Configurably prefetching head-of-queue from ring buffers
US7818389B1 (en) * 2006-12-01 2010-10-19 Marvell International Ltd. Packet buffer apparatus and method
US20130014118A1 (en) * 2011-07-06 2013-01-10 Stephen Jones Simultaneous submission to a multi-producer queue by multiple threads
CN103257888A (zh) * 2012-02-16 2013-08-21 阿里巴巴集团控股有限公司 一种对缓冲队列并发执行读、写访问的方法和设备
CN105045632A (zh) * 2015-08-10 2015-11-11 京信通信技术(广州)有限公司 一种多核环境下实现免锁队列的方法和设备
US20150331720A1 (en) * 2012-10-19 2015-11-19 uCIRRUS Multi-threaded, lockless data parallelization
CN105245912A (zh) * 2015-10-21 2016-01-13 东方网力科技股份有限公司 一种缓存视频数据及读取视频数据的方法及装置
CN105260153A (zh) * 2015-10-15 2016-01-20 西安诺瓦电子科技有限公司 图像输出装置和图像输出方法
CN106648461A (zh) * 2016-11-15 2017-05-10 努比亚技术有限公司 一种内存管理装置和方法
CN106658050A (zh) * 2016-12-30 2017-05-10 北京奇虎科技有限公司 一种流数据的并发读写方法和装置
CN107247561A (zh) * 2017-05-31 2017-10-13 成都华立达电力信息系统有限公司 缓冲池循环存储读写方法
CN107302531A (zh) * 2017-06-19 2017-10-27 青岛华潞佳电子科技有限公司 一种基于状态机和环形队列的串口命令解析方法
US20170329574A1 (en) * 2016-05-13 2017-11-16 Atmel Corporation Display controller

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8281318B2 (en) * 2008-03-31 2012-10-02 Vmware, Inc. Systems and methods for inter process communication based on queues
CN103514053B (zh) * 2013-09-22 2017-01-25 中国科学院信息工程研究所 一种基于共享内存的进程间通讯方法
US9560366B2 (en) * 2014-10-22 2017-01-31 Broadcom Corporation Video encoding for social media
US10048878B2 (en) * 2015-06-08 2018-08-14 Samsung Electronics Co., Ltd. Nonvolatile memory module and storage system having the same
WO2017013931A1 (ja) * 2015-07-21 2017-01-26 ソニー株式会社 先入れ先出し制御回路、記憶装置、および、先入れ先出し制御回路の制御方法
US10055807B2 (en) * 2016-03-02 2018-08-21 Samsung Electronics Co., Ltd. Hardware architecture for acceleration of computer vision and imaging processing
CN105893279B (zh) * 2016-03-30 2019-04-26 北京经纬恒润科技有限公司 一种基于循环队列的数据传输方法及系统
US11226852B2 (en) * 2016-11-25 2022-01-18 Genetec Inc. System for inter-process communication
US10397144B2 (en) * 2016-12-22 2019-08-27 Intel Corporation Receive buffer architecture method and apparatus
US10261708B1 (en) * 2017-04-26 2019-04-16 EMC IP Holding Company LLC Host data replication allocating single memory buffers to store multiple buffers of received host data and to internally process the received host data
WO2019075504A1 (en) * 2017-10-17 2019-04-25 Metamako General Pty Ltd In Its Capacity As General Partner Of Metamako Technology Lp CLOCK DOMAIN CROSSING BUFFER
US20200174707A1 (en) * 2017-10-27 2020-06-04 Wave Computing, Inc. Fifo filling logic for tensor calculation
US10585689B1 (en) * 2017-12-20 2020-03-10 Cisco Technology, Inc. Shared memory interface for application processes
US10713746B2 (en) * 2018-01-29 2020-07-14 Microsoft Technology Licensing, Llc FIFO queue, memory resource, and task management for graphics processing
US11463975B2 (en) * 2018-03-12 2022-10-04 Motorola Solutions, Inc. Base station dynamic range extension

Patent Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6145061A (en) * 1998-01-07 2000-11-07 Tandem Computers Incorporated Method of management of a circular queue for asynchronous access
US6314478B1 (en) * 1998-12-29 2001-11-06 Nec America, Inc. System for accessing a space appended to a circular queue after traversing an end of the queue and upon completion copying data back to the queue
US20040111540A1 (en) * 2002-12-10 2004-06-10 Narad Charles E. Configurably prefetching head-of-queue from ring buffers
US7818389B1 (en) * 2006-12-01 2010-10-19 Marvell International Ltd. Packet buffer apparatus and method
US20130014118A1 (en) * 2011-07-06 2013-01-10 Stephen Jones Simultaneous submission to a multi-producer queue by multiple threads
CN103257888A (zh) * 2012-02-16 2013-08-21 阿里巴巴集团控股有限公司 一种对缓冲队列并发执行读、写访问的方法和设备
US20150331720A1 (en) * 2012-10-19 2015-11-19 uCIRRUS Multi-threaded, lockless data parallelization
CN105045632A (zh) * 2015-08-10 2015-11-11 京信通信技术(广州)有限公司 一种多核环境下实现免锁队列的方法和设备
CN105260153A (zh) * 2015-10-15 2016-01-20 西安诺瓦电子科技有限公司 图像输出装置和图像输出方法
CN105245912A (zh) * 2015-10-21 2016-01-13 东方网力科技股份有限公司 一种缓存视频数据及读取视频数据的方法及装置
US20170329574A1 (en) * 2016-05-13 2017-11-16 Atmel Corporation Display controller
CN106648461A (zh) * 2016-11-15 2017-05-10 努比亚技术有限公司 一种内存管理装置和方法
CN106658050A (zh) * 2016-12-30 2017-05-10 北京奇虎科技有限公司 一种流数据的并发读写方法和装置
CN107247561A (zh) * 2017-05-31 2017-10-13 成都华立达电力信息系统有限公司 缓冲池循环存储读写方法
CN107302531A (zh) * 2017-06-19 2017-10-27 青岛华潞佳电子科技有限公司 一种基于状态机和环形队列的串口命令解析方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
OKLETSGO007: ""一种高效无锁内存队列的实现"", 《HTTP://WWW.VOIDCN.COM/ARTICLE/P-UGTNHQTR-BBT.HTML》 *
韩明峰: "环形缓冲区读写操作的分析与实现", 《单片机与嵌入式系统应用》 *

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109753479B (zh) * 2018-12-28 2021-05-25 杭州迪普科技股份有限公司 一种数据下发方法及装置、设备、介质
CN109753479A (zh) * 2018-12-28 2019-05-14 杭州迪普科技股份有限公司 一种数据下发方法及装置、设备、介质
WO2020135797A1 (zh) * 2018-12-29 2020-07-02 深圳市道通智能航空技术有限公司 一种深度图处理方法、装置和无人机
CN109631853A (zh) * 2018-12-29 2019-04-16 深圳市道通智能航空技术有限公司 一种深度图处理方法、装置和无人机
CN110381331A (zh) * 2019-07-23 2019-10-25 深圳市道通智能航空技术有限公司 一种图像处理方法、装置、航拍设备及存储介质
CN110765209A (zh) * 2019-10-28 2020-02-07 机械工业仪器仪表综合技术经济研究所 数据读写处理方法及装置
CN112783421A (zh) * 2019-11-07 2021-05-11 北京京东尚科信息技术有限公司 一种基于环形缓冲区的异步消费方法和装置
CN112130765A (zh) * 2020-09-17 2020-12-25 智新控制系统有限公司 Eeprom数据读写方法及装置
CN112130765B (zh) * 2020-09-17 2023-05-30 智新控制系统有限公司 Eeprom数据读写方法及装置
CN112802514B (zh) * 2021-01-25 2023-01-17 长江存储科技有限责任公司 闪存存储器的操作方法及装置
CN112802514A (zh) * 2021-01-25 2021-05-14 长江存储科技有限责任公司 闪存存储器的操作方法及装置
CN115934023A (zh) * 2021-08-31 2023-04-07 华为技术有限公司 数据处理方法、数据处理装置以及相关设备
CN117407148A (zh) * 2022-07-08 2024-01-16 华为技术有限公司 数据写入方法、读取方法、装置、电子设备以及存储介质
CN116204337A (zh) * 2023-03-03 2023-06-02 广州市易鸿智能装备有限公司 一种图像传输方法、装置、设备和计算机存储介质
CN116204337B (zh) * 2023-03-03 2024-04-09 广州市易鸿智能装备股份有限公司 一种图像传输方法、装置、设备和计算机存储介质
CN117093541A (zh) * 2023-08-18 2023-11-21 北京天华星航科技有限公司 一种遥感数据的数据提取和归档系统
CN117093541B (zh) * 2023-08-18 2024-02-23 北京天华星航科技有限公司 一种遥感数据的数据提取和归档系统

Also Published As

Publication number Publication date
US20210103409A1 (en) 2021-04-08
US11500586B2 (en) 2022-11-15
EP3786789A1 (en) 2021-03-03
CN108733344B (zh) 2023-07-04
WO2019227724A1 (zh) 2019-12-05
US20230054884A1 (en) 2023-02-23
EP3786789A4 (en) 2021-06-02

Similar Documents

Publication Publication Date Title
CN108733344A (zh) 数据读写方法、装置以及环形队列
US11652760B2 (en) Packet processing system, method and device having reduced static power consumption
CN107220187B (zh) 一种缓存管理方法、装置及现场可编程门阵列
US7634610B2 (en) Reconstructing transaction order using clump tags
CN104503703B (zh) 缓存的处理方法和装置
US9934077B2 (en) Reader-writer lock
US10318165B2 (en) Data operating method, device, and system
CN107203330A (zh) 一种面向读写数据流的闪存数据分布方法
CN105793835B (zh) 用于支持计算环境中的i/o虚拟化的系统和方法
JP7074839B2 (ja) パケット処理
US20090037671A1 (en) Hardware device data buffer
CN109298888B (zh) 队列的数据存取方法及装置
CN108139972A (zh) 硬件辅助数据压缩中的存储器碎片管理
CN103761194B (zh) 一种内存管理方法及装置
CN108153486A (zh) 嵌入式系统的工作参数保护方法以及相关设备
CN102103740A (zh) 一种写入地址和宽度不对齐图像的处理方法和处理电路
CN104407367B (zh) 提高卫星导航终端接收机基带信号处理能力的装置与方法
CN112329412B (zh) 动态控制基于前端技术表格列的方法及装置
US20140379846A1 (en) Technique for coordinating memory access requests from clients in a mobile device
US8645597B2 (en) Memory block reclaiming judging apparatus and memory block managing system
CN112689103A (zh) 屏幕的显示控制系统及方法
WO2019227447A1 (zh) 数据处理方法和处理电路
JP2007140858A (ja) メモリアクセス方法及びメモリアクセス装置
CN110786020A (zh) 视频的处理方法、装置及计算机可读存储介质
US9747226B2 (en) Packet processing system, method and device to optimize packet buffer space

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: 518055 Shenzhen, Guangdong, Nanshan District Xili street, No. 1001, Zhiyuan Road, B1 9.

Applicant after: Shenzhen daotong intelligent Aviation Technology Co.,Ltd.

Address before: 518055 Shenzhen, Guangdong, Nanshan District Xili street, No. 1001, Zhiyuan Road, B1 9.

Applicant before: AUTEL ROBOTICS Co.,Ltd.

GR01 Patent grant
GR01 Patent grant