CN109298888A - 队列的数据存取方法及装置 - Google Patents

队列的数据存取方法及装置 Download PDF

Info

Publication number
CN109298888A
CN109298888A CN201811288069.3A CN201811288069A CN109298888A CN 109298888 A CN109298888 A CN 109298888A CN 201811288069 A CN201811288069 A CN 201811288069A CN 109298888 A CN109298888 A CN 109298888A
Authority
CN
China
Prior art keywords
queue
pointer
node
interior loop
loop queue
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
CN201811288069.3A
Other languages
English (en)
Other versions
CN109298888B (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.)
Hangzhou DPTech Technologies Co Ltd
Original Assignee
Hangzhou DPTech Technologies 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 Hangzhou DPTech Technologies Co Ltd filed Critical Hangzhou DPTech Technologies Co Ltd
Priority to CN201811288069.3A priority Critical patent/CN109298888B/zh
Publication of CN109298888A publication Critical patent/CN109298888A/zh
Priority to US16/669,701 priority patent/US11385900B2/en
Application granted granted Critical
Publication of CN109298888B publication Critical patent/CN109298888B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2205/00Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F2205/06Indexing scheme relating to groups G06F5/06 - G06F5/16
    • G06F2205/064Linked list, i.e. structure using pointers, e.g. allowing non-contiguous address segments in one logical buffer or dynamic buffer space allocation
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Systems (AREA)

Abstract

本说明书提供一种队列的数据存取方法及装置,所述方法包括:构建内外层均为循环队列的双层循环队列;其中,内层循环队列基于数组实现,外层循环队列基于链表实现;设置外层循环队列的管理指针;根据所述管理指针在所述内层循环队列上进行存取数据。上述技术方案充分利用了基于数组和基于链表两种队列方式的优点,解决了内存利用率和存取效率无法很好兼顾的问题,特别是在一些较为复杂的场景中,能够明显提高内存利用率和数据存取效率。

Description

队列的数据存取方法及装置
技术领域
本说明书涉及数据处理技术领域,尤其涉及一种队列的数据存取方法及装置。
背景技术
队列是一种常用的内存数据结构,经常被用在数据具有先进先出特点的场景中。队列是一种先进先出的数据结构:数据进入队列时是从尾部进入的,从队列中取数据时是从头部取出。循环队列是一种逻辑上首尾相连的队列,以实现空间的循环利用,可以基于数组实现,也可以基于链表实现。这两种实现方式各有利弊,在一些简单的应用场景中,用这两种实现方式中的一种就可以满足需求。但在一些较为复杂的场景中,特别是对内存利用率和存取性能都有很高要求的情况下,这两种方式难以满足需求。
实际应用中,使用基于数组的内存循环队列因为存储空间有限,当队列满了的时候,需要重新分配内存空间,然后将数据从原来的内存中拷贝的新分配的内存中。如果每次分配内存时分配的内存空间很大就会导致较低的内存利用率,如果每次分配的内存较小则会导致过多的内存分配和内存拷贝,导致存取性能下降。而如果采用基于链表的方式来实现循环队列,由于每个节点都需要有个指针,每次创建一个节点就要分配一次内存容易导致较多的内存碎片,所以内存利用率不高。
由此可见,传统的队列存取数据的方案,在一些较为复杂的场景中,容易出现内存利用率不高、存取效率低的缺陷。
发明内容
为克服相关技术中存在的问题,本说明书提供了一种队列的数据存取方法及装置。
根据本说明书实施例的第一方面,提供一种队列的数据存取方法,所述方法包括:
构建内外层均为循环队列的双层循环队列;其中,内层循环队列基于数组实现,外层循环队列基于链表实现;
设置外层循环队列的管理指针;
根据所述管理指针在所述内层循环队列上进行存取数据。
在一个实施例中,所述构建内外层均为循环队列的双层循环队列的步骤包括:
基于数组建立内层循环队列,为每个内层循环队列分配连续的内存块;其中,所述内存块是页对齐;
以内层循环队列为节点,用链表的方式将每个内层循环队列串联形成一个循环队列,得到外层循环队列。
在一个实施例中,所述设置外层循环队列的管理指针的步骤包括:
为外层循环队列设置FIRST指针和LAST指针;其中,FIRST指针指向外层循环队列的第一个节点,该节点对应的内层循环队列是非空的;LAST指针指向外层循环队里的最后一个节点,该节点对应的内层循环队列是非空。
在一个实施例中,所述根据所述管理指针在所述内层循环队列上进行存取数据的步骤包括:
对所述双层循环队列进行初始化;
根据所述管理指针指向节点的内层循环队列的空间状态,将数据存入对应内层循环队列的内存块上;
根据所述管理指针指向节点的内层循环队列的空间状态,从对应内层循环队列的内存块上读取数据。
在一个实施例中,所述对所述双层循环队列进行初始化的步骤包括:
根据设定内存块取值建立双层循环队列的一个内层循环队列,将外层循环队列的FIRST指针和LAST指针同时指向该内层循环队列。
在一个实施例中,所述根据所述管理指针指向节点的内层循环队列的空间状态,将数据存入对应内层循环队列的内存块上的步骤包括:
判断外层循环队列的LAST指针指向的内层循环队列是否还有内存空间;
如果有内存空间,则将数据放入该内层循环队列中。
在一个实施例中,所述队列的数据存取方法还包括:
如果没有内存空间,则判断外层循环队列的LAST指针指向的节点后面是否还有节点;
如果有节点,则将外层循环队列的LAST指针指向当前LAST指针指向节点后面的节点;
如果没有节点,则创建一个内层循环队列作为新节点放入外层循环队列中,将外层循环队列的LAST指针指向该新节点;
将数据放进外层循环队列的LAST指针指向节点对应的内层循环队列中。
在一个实施例中,所述根据所述管理指针指向节点的内层循环队列的空间状态,从对应内层循环队列的内存块上读取数据的步骤包括:
判断外层循环队列的FIRST指针指向节点对应的内层循环队列是否为空;
如果为空,则判定整个双层循环队列为空,没有数据出队列;
如果为非空,则从外层循环队列的FIRST指针指向节点的内层循环队列中取出一个数据。
在一个实施例中,所述队列的数据存取方法还包括:
若取出数据后该节点对应的内层循环队列为空,则将该节点从外层循环队列中取出,并将其插入到外层循环队列的LAST指针指向的节点后面。
根据本说明书实施例的第二方面,提供一种队列的数据存取装置,包括:
构建模块,用于构建内外层均为循环队列的双层循环队列;其中,内层循环队列基于数组实现,外层循环队列基于链表实现;
设置模块,用于设置外层循环队列的管理指针;
存取模块,用于根据所述管理指针在所述内层循环队列上进行存取数据。
根据本说明书实施例的第三方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如下方法:
构建内外层均为循环队列的双层循环队列;其中,内层循环队列基于数组实现,外层循环队列基于链表实现;
设置外层循环队列的管理指针;
根据所述管理指针在所述内层循环队列上进行存取数据。
本说明书的实施例提供的技术方案可以包括以下有益效果:
本说明书实施例中,通过构建内外层均为循环队列的双层循环队列,设置外层循环队列的管理指针;并根据所述管理指针在所述内层循环队列上进行存取数据;该方案充分利用了基于数组和基于链表两种队列方式的优点,解决了内存利用率和存取效率无法很好兼顾的问题,特别是在一些较为复杂的场景中,能够明显提高内存利用率和数据存取效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
图1是本说明书根据一示例性实施例示出的一种队列的数据存取方法的流程图。
图2是本说明书根据一示例性实施例示出的双层循环队列的基本结构示意图。
图3是是本说明书根据一示例性实施例示出的数据入队列流程图。
图4是本说明书根据一示例性实施例示出的数据出队列流程图。
图5-17是本说明书根据一示例性实施例示出的双层循环队列的数据存取应用的结构示意图。
图18是本说明书实施例队列的数据存取装置所在计算机设备的一种硬件结构图。
图19是本说明书根据一示例性实施例示出的队列的数据存取装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
接下来对本说明书实施例进行详细说明。
如图1所示,图1是本说明书根据一示例性实施例示出的一种队列的数据存取方法的流程图,包括以下步骤:
在步骤120、构建内外层均为循环队列的双层循环队列;其中,内层循环队列基于数组实现,外层循环队列基于链表实现;
上述步骤中,结合基于数组实现的循环队列和基于链表实现的循环队列实现方式的特性,采用双层循环队列来实现一个在存取性能和内存空间利用率达到良好平衡的队列。参考图2所示,图2是本说明书根据一示例性实施例示出的双层循环队列的基本结构示意图,可见其内外层都是一个循环队列,内层的循环队列是基于数组实现的,外层的循环队列是基于链表实现的。
作为实施例,对于构建内外层均为循环队列的双层循环队列的方法,可以包括如下:
(1)基于数组建立内层循环队列,为每个内层循环队列分配连续的内存块;其中,所述内存块是页对齐。
进一步的,可以为每个内层循环队列分配一大块连续内存,这块内存空间需要是页对齐的,以减少内存碎片的产生;实际应用中,该内存块的大小一般设置为一两个内存页,如果每个元素占用的内存空间较大,则可以适当增加。
(2)以内层循环队列为节点,用链表的方式将每个内层循环队列串联形成一个循环队列,得到外层循环队列。
具体的,用链表的方式将每个内层循环队列串了起来,形成了一个循环队列;外层循环队列中每一个节点包含一个内层循环队列。
在步骤140、设置外层循环队列的管理指针。
此步骤中,外层循环队列基于链表实现,内层循环队列作为外层循环队列的节点,因此外层循环队列需要设置管理指针对内层循环队列进行管理。
在一个实施例中,继续参考图2,在设置外层循环队列的管理指针时,可以为外层循环队列设置FIRST指针和LAST指针;其中,FIRST指针指向外层循环队列的第一个节点,该节点对应的内层循环队列是非空的(即队列中存在至少一个元素);LAST指针指向外层循环队里的最后一个节点,该节点对应的内层循环队列是非空;内层循环队列的指针对应为first指针和last指针。
在步骤160、根据所述管理指针在所述内层循环队列上进行存取数据。
此步骤中,基于双层循环队列及其外层循环队列的管理指针,可以在内层循环队列上进行存取数据,从而实现在存取性能和内存空间利用率达到良好平衡的目的。
在一个实施例中,所述根据所述管理指针在所述内层循环队列上进行存取数据的步骤,可以包括如下:
(1)队列初始化:
对所述双层循环队列进行初始化;即在初始使用时,需要对双层循环队列进行初始化后进行数据存储。
作为实施例中,对所述双层循环队列进行初始化的步骤,可以包括:根据设定内存块取值建立双层循环队列的一个内层循环队列,将外层循环队列的FIRST指针和LAST指针同时指向该内层循环队列;
具体的,初始化双层循环队列,即根据设定内存块大小先创建一个内层循环队列;然后将外层循环队列的FIRST指针和LAST指针同时指向该内层循环队列,形成初始使用状态。
(2)数据入队列:
根据所述管理指针指向节点的内层循环队列的空间状态,将数据存入对应内层循环队列的内存块上;
具体的,可以根据设置的FIRST指针和LAST指针,利用LAST指针指向节点的内层循环队列的内存空间使用的状态,将数据存入节点所对应内层循环队列的内存块上。
作为实施例,参考图3所示,数据入队列可以包括如下过程:
s301,判断外层循环队列的LAST指针指向的内层循环队列是否还有内存空间;
s302,如果有内存空间,则将数据放入该内层循环队列中。
s303,如果没有内存空间,则判断外层循环队列的LAST指针指向的节点后面是否还有节点;
s304,如果有节点,则将外层循环队列的LAST指针指向当前LAST指针指向节点后面的节点;
s305,如果没有节点,则创建一个内层循环队列作为新节点放入外层循环队列中,将外层循环队列的LAST指针指向该新节点;
s306,将数据放进外层循环队列的LAST指针指向节点对应的内层循环队列中。
上述实施例中,如果步骤s301判断有内存空间,则将数据放入该内层循环队列中;此时完成了数据存入,如果步骤s301判断没有内存空间,则可以进一步执行s303的步骤。
(3)数据出队列:
根据所述管理指针指向节点的内层循环队列的空间状态,从对应内层循环队列的内存块上读取数据;
具体的,可以根据设置的FIRST指针和LAST指针,利用FIRST指针和LAST指针指向节点的内层循环队列的存储数据的时机情况,从内层循环队列的内存块将数据读出。
作为实施例,参考图4所示,数据出队列可以包括如下过程:
s401,判断外层循环队列的FIRST指针指向节点对应的内层循环队列是否为空;
s402,如果为空,则判定整个双层循环队列为空,没有数据出队列;
s403,如果为非空,则从外层循环队列的FIRST指针指向节点的内层循环队列中取出一个数据。
s404,若取出数据后该节点对应的内层循环队列为空,则将该节点从外层循环队列中取出,并将其插入到外层循环队列的LAST指针指向的节点后面。
上述实施例中,在步骤s403后完成数据的读出,当s404中判断内层循环队列为空时,进一步该节点从外层循环队列中取出,并将其插入到外层循环队列的LAST指针指向的节点后面,及时删除节点,避免空间浪费。
参考图5-17所示,下面以树的层次遍历为例来说明双层循环队列的数据存取应用;假设树的深度以及节点数量在遍历之前是未知的,为了便于说明,设定每个内层循环队列的容量为2(即:可以存储2个元素,另外空出来一个元素作为哨兵),并用树节点的ID(0-11)来代替树节点。
如图5,图5是树的结构示意图,利用双层循环队列按层次遍历这棵树的过程如下:
(1)初始化一个双层循环队列,其结构如图6所示;
(2)将根节点(ID=0)放入队列,其结构如图7所示;
(3)将根节点从队列中取出,其结构如图8所示;
(4)将节点1放入队列,其结构如图9所示;
(5)将节点2放入队列,其结构如图10所示;
(6)将节点1从队列中取出,其结构如图11所示;
(7)将节点3放入队列,其结构如图12所示;
(8)将节点4放入队列,其结构如图13所示;
(9)将节点2从队列中取出,其结构如图14所示;
(10)将节点5放入队列,其结构如图15所示;
(11)将节点6放入队列,其结构如图16所示;
(12)将节点3出队列,其结构如图17所示;
通过上述变化可以看出,节点3出队列之后FIRST指针指向的内存循环队列中已经没有任何元素了,此时将该内层循环队列从外层循环队列中取出,然后挂在外层循环队列的LAST指针指向的节点的后面,节点3出队列之后的队列如图17所示。
对后面的树节点的遍历过程也都是类似的,这里就不再一一赘述。
另外,如果双层循环队列占用的内存空间过大,则可以通过释放外层循环队列中LAST指向节点后面的节点的空间来释放队列占用的内存空间,显然这也是基于数组实现的队列无法做到的。
综合上述实施例可以发现:基于数组实现的循环队列,由于一般需要事先知道需要存储的数据的最大数量。但是在很多情况下需要存储的数据的最大量事先是无法预知的,在这种情况下通常会预先分配一个容量,待存储的数据大于这个容量时再重新分配一个更大空间的内存,然后将原来内存上的数据拷贝到刚刚分配的内存中。如果预分配或者再分配的内存太大,则会浪费大量的内存空间,如果预分配或再分配的内层空间过小,则会存在大量的内存拷贝操作,影响装置的效率。
而基于链表实现的循环队列,由于链表中的每个节点都是动态创建的,每次插入一个数据便动态创建一个节点,然后插入到队列中。但是基于链表的实现需要用到指针,所以会存在较大的空间浪费,尤其是当队列中存储的元素数量特别多的时候。这种方式还可能导致大量的内存碎片的产生。
而本发明实施例方案,采用的双层循环队列综合了基于数组实现的队列和基于链表实现的队列的优点,可以在具有很高的内存利用率的情况下获得很好的存取性能。另外,根据实际的业务情况调整内层循环队列的大小可以很容易获得最佳存取性能或者最佳内存利用率,或者两者之间的一个平衡。
与前述方法的实施例相对应,本说明书还提供了队列的数据存取装置及其所应用的终端的实施例。
本说明书队列的数据存取装置的实施例可以应用在计算机设备上,例如服务器或终端设备。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在队列的数据存取的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图18所示,为本说明书实施例队列的数据存取所在计算机设备的一种硬件结构图,除了图18所示的处理器1810、内存1830、网络接口1820、以及非易失性存储器1840之外,实施例中装置1831所在的服务器或电子设备,通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。
如图19所示,图19是本说明书根据一示例性实施例示出的一种队列的数据存取装置的框图,所述装置包括:
构建模块120,用于构建内外层均为循环队列的双层循环队列;其中,内层循环队列基于数组实现,外层循环队列基于链表实现;
设置模块140,用于设置外层循环队列的管理指针;
存取模块160,用于根据所述管理指针在所述内层循环队列上进行存取数据。
相应的,本说明书还提供一种队列的数据存取装置,所述装置包括有处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为:
构建内外层均为循环队列的双层循环队列;其中,内层循环队列基于数组实现,外层循环队列基于链表实现;
设置外层循环队列的管理指针;
根据所述管理指针在所述内层循环队列上进行存取数据。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。

Claims (11)

1.一种队列的数据存取方法,包括:
构建内外层均为循环队列的双层循环队列;其中,内层循环队列基于数组实现,外层循环队列基于链表实现;
设置外层循环队列的管理指针;
根据所述管理指针在所述内层循环队列上进行存取数据。
2.根据权利要求1所述的方法,其特征在于,所述构建内外层均为循环队列的双层循环队列的步骤包括:
基于数组建立内层循环队列,为每个内层循环队列分配连续的内存块;其中,所述内存块是页对齐;
以内层循环队列为节点,用链表的方式将每个内层循环队列串联形成一个循环队列,得到外层循环队列。
3.根据权利要求2所述的方法,其特征在于,所述设置外层循环队列的管理指针的步骤包括:
为外层循环队列设置FIRST指针和LAST指针;其中,FIRST指针指向外层循环队列的第一个节点,该节点对应的内层循环队列是非空的;LAST指针指向外层循环队里的最后一个节点,该节点对应的内层循环队列是非空。
4.根据权利要求3所述的方法,其特征在于,所述根据所述管理指针在所述内层循环队列上进行存取数据的步骤包括:
对所述双层循环队列进行初始化;
根据所述管理指针指向节点的内层循环队列的空间状态,将数据存入对应内层循环队列的内存块上;
根据所述管理指针指向节点的内层循环队列的空间状态,从对应内层循环队列的内存块上读取数据。
5.根据权利要求4所述的方法,其特征在于,所述对所述双层循环队列进行初始化的步骤包括:
根据设定内存块取值建立双层循环队列的一个内层循环队列,将外层循环队列的FIRST指针和LAST指针同时指向该内层循环队列。
6.根据权利要求4所述的方法,其特征在于,所述根据所述管理指针指向节点的内层循环队列的空间状态,将数据存入对应内层循环队列的内存块上的步骤包括:
判断外层循环队列的LAST指针指向的内层循环队列是否还有内存空间;
如果有内存空间,则将数据放入该内层循环队列中。
7.根据权利要求6所述的方法,其特征在于,还包括:
如果没有内存空间,则判断外层循环队列的LAST指针指向的节点后面是否还有节点;
如果有节点,则将外层循环队列的LAST指针指向当前LAST指针指向节点后面的节点;
如果没有节点,则创建一个内层循环队列作为新节点放入外层循环队列中,将外层循环队列的LAST指针指向该新节点;
将数据放进外层循环队列的LAST指针指向节点对应的内层循环队列中。
8.根据权利要求4所述的方法,其特征在于,所述根据所述管理指针指向节点的内层循环队列的空间状态,从对应内层循环队列的内存块上读取数据的步骤包括:
判断外层循环队列的FIRST指针指向节点对应的内层循环队列是否为空;
如果为空,则判定整个双层循环队列为空,没有数据出队列;
如果为非空,则从外层循环队列的FIRST指针指向节点的内层循环队列中取出一个数据。
9.根据权利要求8所述的方法,其特征在于,还包括:
若取出数据后该节点对应的内层循环队列为空,则将该节点从外层循环队列中取出,并将其插入到外层循环队列的LAST指针指向的节点后面。
10.一种队列的数据存取装置,所述装置包括:
构建模块,用于构建内外层均为循环队列的双层循环队列;其中,内层循环队列基于数组实现,外层循环队列基于链表实现;
设置模块,用于设置外层循环队列的管理指针;
存取模块,用于根据所述管理指针在所述内层循环队列上进行存取数据。
11.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如下方法:
构建内外层均为循环队列的双层循环队列;其中,内层循环队列基于数组实现,外层循环队列基于链表实现;
设置外层循环队列的管理指针;
根据所述管理指针在所述内层循环队列上进行存取数据。
CN201811288069.3A 2018-10-31 2018-10-31 队列的数据存取方法及装置 Active CN109298888B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201811288069.3A CN109298888B (zh) 2018-10-31 2018-10-31 队列的数据存取方法及装置
US16/669,701 US11385900B2 (en) 2018-10-31 2019-10-31 Accessing queue data

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811288069.3A CN109298888B (zh) 2018-10-31 2018-10-31 队列的数据存取方法及装置

Publications (2)

Publication Number Publication Date
CN109298888A true CN109298888A (zh) 2019-02-01
CN109298888B CN109298888B (zh) 2021-08-24

Family

ID=65145307

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811288069.3A Active CN109298888B (zh) 2018-10-31 2018-10-31 队列的数据存取方法及装置

Country Status (2)

Country Link
US (1) US11385900B2 (zh)
CN (1) CN109298888B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112711545A (zh) * 2021-03-29 2021-04-27 广州宸祺出行科技有限公司 一种基于数组链表式队列结构的数据存取方法
CN112860371A (zh) * 2019-11-28 2021-05-28 北京京东振世信息技术有限公司 一种Queue容器的实现方法和装置
CN114124849A (zh) * 2021-12-03 2022-03-01 北京天融信网络安全技术有限公司 一种基于vhost-user的服务链实现方法及装置

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1556475A (zh) * 2004-01-02 2004-12-22 中兴通讯股份有限公司 嵌入式实时操作系统中内存释放的方法
CN1570883A (zh) * 2003-07-15 2005-01-26 中兴通讯股份有限公司 嵌入式实时操作系统中非缓冲内存动态分配方法
US20100265954A1 (en) * 2006-10-06 2010-10-21 Broadcom Corporation Method, System, and Computer Program Product for High-Performance Bonding Resequencing
CN101938583A (zh) * 2010-09-03 2011-01-05 电子科技大学 一种基于多名单的异常呼叫过滤方法
CN104035884A (zh) * 2014-06-30 2014-09-10 河南百旺金赋电脑有限公司 一种双环形队列数据存储方法和智能网关
CN104050091A (zh) * 2012-12-28 2014-09-17 华耀(中国)科技有限公司 基于非一致性内存访问系统的网络设备及其设置方法
CN104077113A (zh) * 2014-07-10 2014-10-01 中船重工(武汉)凌久电子有限责任公司 一种无锁并发消息处理机制的实现方法
CN104158625A (zh) * 2014-08-13 2014-11-19 南京铁道职业技术学院 一种地铁调度通信的信息传输分发方法
CN104657108A (zh) * 2015-02-15 2015-05-27 北京邮电大学 一种微处理器的软件模拟器的事件队列的管理方法及系统
CN107643986A (zh) * 2017-09-11 2018-01-30 广州慧睿思通信息科技有限公司 一种使用环形Buffer和自动回收描述符的AIF接收数据处理方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5185861A (en) * 1991-08-19 1993-02-09 Sequent Computer Systems, Inc. Cache affinity scheduler
US5261053A (en) * 1991-08-19 1993-11-09 Sequent Computer Systems, Inc. Cache affinity scheduler
US6822958B1 (en) * 2000-09-25 2004-11-23 Integrated Device Technology, Inc. Implementation of multicast in an ATM switch
US7075928B1 (en) * 2000-09-25 2006-07-11 Integrated Device Technology, Inc. Detection and recovery from connection failure in an ATM switch
US8806168B2 (en) * 2011-09-12 2014-08-12 Microsoft Corporation Producer-consumer data transfer using piecewise circular queue
US20140181822A1 (en) * 2012-12-20 2014-06-26 Advanced Micro Devices, Inc. Fragmented Channels
KR101888405B1 (ko) * 2016-06-01 2018-08-14 주식회사 맴레이 메모리 컨트롤러, 그리고 이를 포함하는 메모리 모듈 및 프로세서

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1570883A (zh) * 2003-07-15 2005-01-26 中兴通讯股份有限公司 嵌入式实时操作系统中非缓冲内存动态分配方法
CN1556475A (zh) * 2004-01-02 2004-12-22 中兴通讯股份有限公司 嵌入式实时操作系统中内存释放的方法
US20100265954A1 (en) * 2006-10-06 2010-10-21 Broadcom Corporation Method, System, and Computer Program Product for High-Performance Bonding Resequencing
CN101938583A (zh) * 2010-09-03 2011-01-05 电子科技大学 一种基于多名单的异常呼叫过滤方法
CN104050091A (zh) * 2012-12-28 2014-09-17 华耀(中国)科技有限公司 基于非一致性内存访问系统的网络设备及其设置方法
CN104035884A (zh) * 2014-06-30 2014-09-10 河南百旺金赋电脑有限公司 一种双环形队列数据存储方法和智能网关
CN104077113A (zh) * 2014-07-10 2014-10-01 中船重工(武汉)凌久电子有限责任公司 一种无锁并发消息处理机制的实现方法
CN104158625A (zh) * 2014-08-13 2014-11-19 南京铁道职业技术学院 一种地铁调度通信的信息传输分发方法
CN104657108A (zh) * 2015-02-15 2015-05-27 北京邮电大学 一种微处理器的软件模拟器的事件队列的管理方法及系统
CN107643986A (zh) * 2017-09-11 2018-01-30 广州慧睿思通信息科技有限公司 一种使用环形Buffer和自动回收描述符的AIF接收数据处理方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112860371A (zh) * 2019-11-28 2021-05-28 北京京东振世信息技术有限公司 一种Queue容器的实现方法和装置
CN112711545A (zh) * 2021-03-29 2021-04-27 广州宸祺出行科技有限公司 一种基于数组链表式队列结构的数据存取方法
CN114124849A (zh) * 2021-12-03 2022-03-01 北京天融信网络安全技术有限公司 一种基于vhost-user的服务链实现方法及装置

Also Published As

Publication number Publication date
US20200133855A1 (en) 2020-04-30
US11385900B2 (en) 2022-07-12
CN109298888B (zh) 2021-08-24

Similar Documents

Publication Publication Date Title
Jeannot et al. Near-optimal placement of MPI processes on hierarchical NUMA architectures
CN109298888A (zh) 队列的数据存取方法及装置
CN109684099B (zh) 消息处理方法及装置
CN104778222B (zh) 基于usb存储设备的媒体库建立及更新方法
CN109145051A (zh) 分布式数据库的数据汇总方法及装置和电子设备
CN109271106B (zh) 消息存储、读取方法及装置、服务器、存储介质
CN110688256B (zh) 一种元数据上电恢复方法、装置、电子设备及存储介质
CN104731907A (zh) 基于nosql的数据存储方法
WO2017050064A1 (zh) 共享内存数据库的内存管理方法及装置
CN106598495A (zh) 一种混合存储服务质量的控制方法及控制装置
CN102985909A (zh) 为良好分格的对象提供高扩展性网络存储的方法和设备
CN104798063A (zh) 存储设备和主机设备
CN107533435A (zh) 存储空间的分配方法及存储设备
CN105094751A (zh) 一种用于流式数据并行处理的内存管理方法
WO2024078429A1 (zh) 内存管理方法、装置、计算机设备及存储介质
CN108415962A (zh) 一种云存储系统
CN103793332B (zh) 基于内存的数据存储方法、装置、处理器和电子设备
CN108062235A (zh) 数据处理方法及装置
WO2021019378A1 (en) Two-layered deterministic inter-process communication scheduler for input output determinism in solid state drives
CN104199781A (zh) 一种基于共享内存的内存碎片分配方法和装置
CN116483740B (zh) 内存数据的迁移方法、装置、存储介质及电子装置
CN109788013B (zh) 分布式系统中作业资源分配方法、装置及设备
CN109814805A (zh) 存储系统中分条重组的方法及分条服务器
CN105450679A (zh) 进行数据云存储的方法及系统
CN108833570B (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
GR01 Patent grant
GR01 Patent grant