CN115934023B - 数据处理方法、数据处理装置以及相关设备 - Google Patents
数据处理方法、数据处理装置以及相关设备 Download PDFInfo
- Publication number
- CN115934023B CN115934023B CN202111015761.0A CN202111015761A CN115934023B CN 115934023 B CN115934023 B CN 115934023B CN 202111015761 A CN202111015761 A CN 202111015761A CN 115934023 B CN115934023 B CN 115934023B
- Authority
- CN
- China
- Prior art keywords
- storage area
- pointer
- read
- data
- size
- 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
- 238000003672 processing method Methods 0.000 title abstract description 31
- 238000000034 method Methods 0.000 claims abstract description 55
- 239000000523 sample Substances 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 12
- 238000004590 computer program Methods 0.000 description 4
- 230000003068 static effect Effects 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/06—Methods 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/10—Methods 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 having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
- G06F5/12—Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种数据处理方法,应用于计算机领域。方法包括以下步骤:获取循环存储队列的第一全局读指针。循环存储队列包括多个存储区域。第一全局读指针指向多个存储区域中的第一存储区域。获取第一存储区域的第一写标识。第一写标识表征第一存储区域中已存储数据的空间大小。第一全局写指针确定第一存储区域中已被分配的空间大小。若第一存储区域中已存储数据的空间大小等于第一存储区域中已被分配的空间大小,则读取第一子区域中的第一数据。在本申请中,通过增加第一写标识,使得乱序commit不会影响读取的数据的正确性。因此,本申请可以通过乱序commit提高***的运行效率。
Description
技术领域
本申请涉及计算机领域,尤其涉及数据处理方法、数据处理装置以及相关设备。
背景技术
在操作***中,循环存储队列是一种特殊的先进先出队列。循环存储队列将存储空间中的最后一个位置连接第一个位置,形成逻辑上的环状空间。
图1为循环存储队列的结构示意图。如图1所示,循环存储队列包括对应的全局写指针和全局读指针。沿逆时针方向,全局写指针和全局读指针之间的区域为存储区域b。全局读指针和全局写指针之间的区域为区域a。区域a中的数据即将被读取,区域b即将被写入数据。随着数据的写入和读取,全局写指针和全局读指针沿逆时针方向移动。例如,在线程1分配到了子区域b1后,全局写指针移动至子区域b2。在线程2分配到了子区域b2后,全局写指针移动至剩余区域b3。在写入数据后,不同的线程执行顺序commit。具体地,在子区域b1中写入数据后,线程1执行commit操作。commit操作表征子区域b1中已写入数据。子区域b1中的数据可以被读取。类似地,在子区域b2中写入数据后,线程2执行commit操作。commit操作表征子区域b2中已写入数据。子区域b2中的数据可以被读取。若不同的线程执行乱序commit,则会影响数据的读取。具体地,若线程2提前进行commit操作,在全局读指针移动至子区域b1后,则可能存在线程读取子区域b1中的数据。但是,线程1并未写完数据。因此,线程读取的数据可能是错误的。
在线程2先写入数据后,线程2会进入等待状态,直至线程1完成commit操作。在等待期间,线程2需要频繁判断线程1是否完成commit操作,从而降低了***的运行效率。
发明内容
本申请提供了一种数据处理方法、数据处理装置以及相关设备。在申请中,通过增加第一写标识,使得乱序commit不会影响读取的数据的正确性。因此,本申请可以通过乱序commit提高***的运行效率。
本申请第一方面提供了一种数据处理方法。数据处理方法可以应用于包括循环存储队列的操作***中。数据处理方法的执行主体可以线程、操作***或安装有操作***的计算机设备。后续将以执行主体是计算机设备为例,对数据处理方法进行描述。数据处理方法包括以下步骤:计算机设备获取循环存储队列的第一全局读指针。循环存储队列包括M个存储区域。M为大于1的整数。每个存储区域在逻辑上连续。第一全局读指针指向M个存储区域中的第一存储区域。计算机设备获取第一存储区域的第一写标识。M个存储区域中的每个存储区域对应一个写标识。第一存储区域和第一写标识对应。第一写标识表征第一存储区域中已存储数据的空间大小。计算机设备确定第一存储区域中已被分配的空间大小。通过第一写标识,计算机设备可以确定第一存储区域的commit状态。commit状态包括完全commit和未完全commit。完全commit表示第一存储区域中已存储数据的空间大小等于第一存储区域中已被分配的空间大小。未完全commit表征第一存储区域中已存储数据的空间大小小于第一存储区域中已被分配的空间大小。若满足第一条件,则计算机设备读取第一子区域中的第一数据。第一条件包括:第一存储区域的commit状态为完全commit。
在申请中,第一写标识表征的是数据大小。因此,在第一存储区域中,乱序commit并不会影响对commit状态的判断,即乱序commit不会影响读取的数据的正确性。因此,在第一存储区域中写入数据后,线程可以不需要等待其它线程完成commit操作,从而提高了***的运行效率。
在第一方面的一种可选方式中,若第一全局写指针指向第一存储区域以外的存储区域,则计算机设备确定第一存储区域中已被分配的空间大小等于第一存储区域总的空间大小。和/或,若第一全局写指针指向第一存储区域,则计算机设备确定第一存储区域中已被分配的空间大小或等于第一字节的位置和第一存储区域的起始位置的差值。第一全局写指针指向第一存储区域中第一字节。其中,通过额外的标识也可以记录第一存储区域中已被分配的空间大小。在本申请中,通过第一全局写指针来确定第一存储区域中已被分配的空间大小,可以提高第一全局写指针的利用率,节约***的存储空间。
在第一方面的一种可选方式中,在读取第一子区域中的第一数据前,数据处理方法还包括:计算机设备获取第一存储区域的第一读标识。第一读标识表征第一存储区域中已被读取的数据的数据大小。计算机设备确定第一写标识和第一读标识的大小关系。第一条件还包括:第一写标识大于第一读标识。其中,当第一写标识等于第一读标识时,表征第一子区域中还未写入未被读取的数据,计算机设备无法读取第一数据。因此,计算机设备可以无需判断第一存储区域的commit状态,从而节约***的处理资源。
在第一方面的一种可选方式中,第一子区域和第一数据的大小为X字节。X为大于0的整数。在读取第一子区域中的第一数据后,数据处理方法还包括:计算机设备通过X更新第一存储区域的第一读标识。更新后的第一读标识等于第一读标识和X之和。
在第一方面的一种可选方式中,数据处理方法还包括:计算机设备获取循环存储队列的第二全局写指针。第二全局写指针指向第一存储区域中的第二字节。第一子区域的起始位置为第二字节。若第二字节的位置与第一存储区域的终点位置的差值大于或等于X,则计算机设备从第二字节中写入第一数据。若第二字节的位置与第一存储区域的终点位置的差值小于X,则计算机设备不在第二字节开始写入第一数据。其中,差值小于X表征第一存储区域的剩余空间不足。当第一存储区域的剩余空间不足时,当前线程只能在剩余空间写入第一数据的部分数据。当前线程还需要在下一个存储区域的第一个子区域写入第一数据的另一部分数据。在多线程并发的场景中,当前线程可能无法被分配到下一个存储区域的第一个子区域。此时,第一数据的另一部分数据无法被写入到第一个子区域,从而降低了***的可靠性。差值大于或等于X表征第一存储区域有足够的剩余空间。计算机设备只在有足够的剩余空间时,才在剩余空间中写入第一数据。因此,本申请可以提高***的可靠性。
在第一方面的一种可选方式中,数据处理方法还包括:计算机设备获取循环存储队列的第三全局写指针。第三全局写指针指向第一存储区域的第三字节。计算机设备获取待写入的第二数据的大小。第二数据的大小为N字节。若第三字节的位置与第一存储区域的终点位置表征第一存储区域的剩余区域小于N字节,则计算机设备为剩余区域添加目标标识。目标标识用于表征剩余区域为无效子区域。例如,计算机设备可以在剩余区域的头部添加目标标识。通过增加目标标识,可以避免计算机设备读取到错误的数据。例如,错误的数据可能是上一个循环中写入的已被读取过的数据。因此,本申请可以提高***的可靠性。
在第一方面的一种可选方式中,在读取第一子区域中的第一数据前,数据处理方法还包括:计算机设备确定第一子区域是否为无效子区域。第一条件还包括:第一子区域不是无效子区域。若第一子区域是无效子区域,则计算机设备不读取第一子区域中的数据。其中,若计算机设备读取第一子区域中的无效数据,则会浪费***资源。本申请通过在读取第一数据前确定第一子区域是否为无效子区域,可以避免浪费***资源。
在第一方面的一种可选方式中,数据处理方法还包括:若满足第二条件,则计算机设备更新第三全局写指针。更新后的第三全局写指针指向第二存储区域。第二存储区域为第一存储区域的下一个存储区域。第二条件包括:第二存储区域未被分配过。或第三全局读指针指向第二存储区域以外的存储区域。第二存储区域的第二写标识除以第二存储区域的总的空间大小等于整数。第二写标识表征第二存储区域中已存储数据的空间大小。其中,当第三全局读指针指向第二存储区域以外的存储区域,第二存储区域的第二写标识除以第二存储区域的总的空间大小等于整数时,表示在最后一次循环中,第二存储区域中的数据已经被完全写入。当第三全局读指针指向第二存储区域,或第二存储区域的第二写标识除以第二存储区域的总的空间大小不等于整数时,表示在上一个循环中,第二存储区域中的数据未被完全写入。在第二存储区域中的数据还未被完全写入时,计算机设备不能更新第三全局写指针。否则可能产生两个线程同时写入数据到相同的字节,从而造成***异常。在本申请中,通过在更新第三全局写指针前确定第二存储区域中的数据是否已经被完全写入,可以提高***的稳定性。
在第一方面的一种可选方式中,在计算机设备更新第三全局写指针前,数据处理方法还包括:计算机设备将第二写标识清零。第一全局读指针包括第一读区域指针和第一区域内读偏移指针。第一读区域指针指向第一存储区域。第一区域内读偏移指针指向第一存储区域中的第二字节。第一全局写指针包括第一写区域指针和第一区域内写偏移指针。在计算机设备读取第一子区域中的第一数据后,数据处理方法还包括:若第一读区域指针和第一写区域指针的差值大于M,则计算机设备将第一读标识清零。其中,为了提高数据写入的效率,计算机设备在写入数据时,可能会覆盖还未被读取的数据。当第一写标识等于第一读标识时,第一子区域中的数据可能未被读取。因此,若计算机设备仍然通过第一写标识的第一读标识大小关系确定是否执行commit状态的判断,则可能造成***异常,例如数据无法被读取。因此,本申请通过清零可以提高***的可靠性。
在第一方面的一种可选方式中,数据处理方法还包括:若第一读区域指针和第一写区域指针的差值大于M,则更新第一读区域指针。更新后的第一读区域指针等于第一写区域指针和Z的差值,Z=M-1。其中,若差值大于M,则表征第一子区域写入的数据在未被读取的情况下,被覆盖写入。若计算机设备仍然从第一子区域开始读取数据,则会丢失第一全局写指针到第一子区域之间的数据。在本申请中,通过将第一读区域指针更新至第一写区域指针的前一个存储区域,可以尽量减少丢失的数据量,提高***的可靠性。
在第一方面的一种可选方式中,第二条件还包括:第二存储区域的第二读标识除以第二存储区域的总的空间大小等于整数。第二读标识表征第二存储区域中已被读取的数据的数据大小。其中,当第二读标识除以第二存储区域的总的空间大小等于整数时,表示在上一个循环中,第二存储区域中的数据已经被完全读取。当第二读标识除以第二存储区域的总的空间大小不等于整数时,表示在上一个循环中,第二存储区域中的数据未被完全读取。通过增加第二条件的内容,可以避免计算机设备在写入数据时覆盖还未被读取的数据,从而减少数据的丢失,提高***的可靠性。
本申请第二方面提供了一种数据处理装置。数据处理装置包括第一获取模块、第二获取模块、处理模块和读取模块。第一获取模块用于获取循环存储队列的第一全局读指针。循环存储队列包括M个存储区域。M为大于1的整数。第一全局读指针指向M个存储区域中的第一存储区域。第二获取模块用于获取第一存储区域的第一写标识。第一写标识表征第一存储区域已存储数据的空间大小。处理模块用于确定第一存储区域中已被分配的空间大小。读取模块用于若满足第一条件,则读取第一子区域中的第一数据。第一条件包括:第一存储区域中已存储数据的空间大小等于第一存储区域中已被分配的空间大小。
在第二方面的一种可选方式中,处理模块用于若第一全局写指针指向第一存储区域以外的存储区域,则确定第一存储区域中已被分配的空间大小等于第一存储区域总的空间大小。和/或,处理模块用于若第一全局写指针指向第一存储区域,则确定第一存储区域中已被分配的空间大小等于第一字节的位置和第一存储区域的起始位置的差值。第一全局写指针指向第一存储区域中的第一字节。
在第二方面的一种可选方式中,第一获取模块还用于获取第一存储区域的第一读标识。第一读标识表征第一存储区域中已被读取的数据的数据大小。处理模块还用于确定第一写标识和第一读标识的大小关系;第一条件还包括:第一写标识大于第一读标识。
在第二方面的一种可选方式中,数据处理装置还包括更新模块。第一子区域和第一数据的大小为X字节。X为大于0的整数。更新模块用于通过X更新第一存储区域的第一读标识。更新后的第一读标识等于第一读标识和X之和。
在第二方面的一种可选方式中,第一获取模块还用于获取循环存储队列的第二全局写指针。第二全局写指针指向第一存储区域中的第二字节。第一存储区域的起始位置为第二字节。数据处理装置还包括写入模块。写入模块用于若第二字节的位置与第一存储区域的终点位置的差值大于或等于X,则在第一子区域中写入第一数据。
在第二方面的一种可选方式中,第一获取模块还用于获取循环存储队列的第三全局写指针。第三全局写指针指向第一存储区域的第三字节。第一获取模块还用于获取待写入的第二数据的大小。第二数据的大小为N字节。数据处理装置还包括添加模块。添加模块用于若第三字节的位置与第一存储区域的终点位置表征第一存储区域的剩余区域小于N字节,则为剩余区域添加目标标识。目标标识用于表征剩余区域为无效子区域。
在第二方面的一种可选方式中,处理模块还用于确定第一子区域是否为无效子区域。第一条件还包括:第一子区域不是无效子区域。
在第二方面的一种可选方式中,数据处理装置还包括更新模块。更新模块用于若满足第二条件,则更新第三全局写指针。更新后的第三全局写指针指向第二存储区域的第一个字节。第二存储区域为第一存储区域的下一个存储区域。第二条件包括:第二存储区域未分配过,或第三全局读指针指向第二存储区域以外的存储区域。第二存储区域的第二写标识除以第二存储区域的总的空间大小等于整数。第二写标识表征第二存储区域中已存储数据的空间大小。
在第二方面的一种可选方式中,数据处理装置还包括清零模块。清零模块用于将第二写标识清零。第一全局读指针包括第一读区域指针和第一区域内读偏移指针。第一读区域指针指向第一存储区域。第一区域内读偏移指针指向第一存储区域中的第二字节。第一全局写指针包括第一写区域指针和第一区域内写偏移指针。清零模块还用于若第一读区域指针和第一写区域指针的差值大于M,则将第一存储区域中的第一读标识清零。
在第二方面的一种可选方式中,更新模块还用于若第一读区域指针和第一写区域指针的差值大于M,则更新第一读区域指针。更新后的第一读区域指针等于第一写区域指针和Z的差值。Z=M-1。
在第二方面的一种可选方式中,第二条件还包括:第二存储区域的第二读标识除以第二存储区域的总的空间大小等于整数。第二读标识表征第二存储区域中已被读取的数据的数据大小。
本申请第三方面提供了一种计算机设备。计算机设备包括存储器和处理器。存储器中存储有循环存储队列的第一全局读指针。循环存储队列包括M个存储区域。M为大于1的整数。第一全局读指针指向M个存储区域中的第一存储区域。存储器中还存储有第一存储区域的第一写标识。第一写标识表征第一存储区域中已存储数据的空间大小。处理器用于确定第一存储区域中已被分配的空间大小。处理器用于若满足第一条件,则读取第一子区域中的第一数据。第一条件包括:第一存储区域中已存储数据的空间大小等于第一存储区域中已被分配的空间大小。
在第三方面的一种可选方式中,处理器用于若第一全局写指针指向第一存储区域以外的存储区域,则确定第一存储区域中已被分配的空间大小等于第一存储区域总的空间大小。和/或,处理器用于若第一全局写指针指向第一存储区域,则确定第一存储区域中已被分配的空间大小等于第一字节的位置和第一存储区域的起始位置的差值。第一全局写指针指向第一存储区域的第一字节。
在第三方面的一种可选方式中,处理器还用于获取第一存储区域的第一读标识。第一读标识表征第一存储区域中已被读取的数据的空间大小。处理器还用于确定第一写标识和第一读标识的大小关系;第一条件还包括:第一写标识大于第一读标识。
在第三方面的一种可选方式中,第一子区域和第一数据的大小为X字节。X为大于0的整数。处理器还用于通过X更新第一存储区域的第一读标识。更新后的第一读标识等于第一读标识和X之和。
在第三方面的一种可选方式中,处理器还用于获取循环存储队列的第二全局写指针。第二全局写指针指向第一存储区域中的第二字节。第二字节为第一子区域的起始位置。处理器还用于若第二字节的位置与第一存储区域的终点位置的差值大于或等于X,则在第一子区域中写入第一数据。
在第三方面的一种可选方式中,处理器还用于获取循环存储队列的第三全局写指针。第三全局写指针指向第一存储区域的第三字节。处理器还用于获取待写入的第二数据的大小。第二数据的大小为N字节。处理器还用于若第三字节的位置与第一存储区域的终点位置表征第一存储区域的剩余区域小于N字节,则为剩余区域添加目标标识。目标标识用于表征剩余区域为无效子区域。
在第三方面的一种可选方式中,处理器还用于确定第一子区域是否为无效子区域。第一条件还包括:第一子区域不是无效子区域。
在第三方面的一种可选方式中,处理器还用于若满足第二条件,则更新第三全局写指针。更新后的第三全局写指针指向第二存储区域的第一个字节。第二存储区域为第一存储区域的下一个存储区域。第二条件包括:第二存储区域未分配过,或第三全局读指针指向第二存储区域以外的存储区域。第二存储区域的第二写标识除以第二存储区域的总的空间大小等于整数。第二写标识表征第二存储区域中已存储数据的空间大小。
在第三方面的一种可选方式中,处理器还用于将第二写标识清零。第一全局读指针包括第一读区域指针和第一区域内读偏移指针。第一读区域指针指向第一存储区域。第一区域内读偏移指针指向第一存储区域中的第二字节。第一全局写指针包括第一写区域指针和第一区域内写偏移指针。处理器还用于若第一读区域指针和第一写区域指针的差值大于M,则将第一存储区域中的第一读标识清零。
在第三方面的一种可选方式中,处理器还用于若第一读区域指针和第一写区域指针的差值大于M,则更新第一读区域指针。更新后的第一读区域指针等于第一写区域指针和Z的差值。Z=M-1。
在第三方面的一种可选方式中,第二条件还包括:第二存储区域的第二读标识除以第二存储区域的总的空间大小等于整数。第二读标识表征第二存储区域中已被读取的数据的数据大小。
本申请第四方面提供了一种计算机存储介质,其特征在于,所述计算机存储介质中存储有指令,所述指令在计算机设备上执行时,使得所述计算机设备执行如第一方面或第一方面任意一种实施方式所述的方法。
本申请第五方面提供了一种计算机程序产品,其特征在于,所述计算机程序产品在计算机设备上执行时,使得所述计算机设备执行如第一方面或第一方面任意一种实施方式所述的方法。
附图说明
图1为循环存储队列的结构示意图;
图2为本申请中提供的数据处理方法的流程示意图;
图3为本申请中提供的循环存储队列的第一个结构示意图;
图4为本申请中提供的写入数据的方法的第一个流程示意图;
图5为本申请中提供的循环存储队列的第二个结构示意图;
图6为本申请中提供的全局写指针的结构示意图;
图7为本申请中提供的读取数据的方法的第一个流程示意图;
图8为本申请中提供的写入数据的方法的第二个流程示意图;
图9为本申请中提供的读取数据的方法的第二个流程示意图;
图10为本申请中提供的数据处理装置的结构示意图;
图11为本申请中提供的计算机设备的结构示意图。
具体实施方式
本申请提供了一种数据处理方法、数据处理装置以及相关设备。在申请中,通过增加第一写标识,使得乱序commit不会影响读取的数据的正确性。因此,本申请可以通过乱序commit提高***的运行效率。应理解,本申请中使用的“第一”、“第二”、“目标”等仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。另外,为了简明和清楚,本申请多个附图中重复参考编号和/或字母。重复并不表明各种实施例和/或配置之间存在严格的限定关系。
本申请中的数据处理方法可以应用于计算机领域,例如使用循环存储队列的操作***。在图1所示的循环存储队列中,不同的线程必须按照特定的顺序执行commit操作,简称顺序commit。特定的顺序是指全局写指针和全局读指针的移动方向。例如,在图1中,特定的顺序为逆时针方向。在采用顺序commit时,在后的线程即使先写入数据,也必须等待在前的线程完成commit操作。并且,在等待期间,在后的线程需要频繁判断在前的线程是否完成commit操作,从而降低了***的运行效率。
为此,本申请提供了一种数据处理方法。图2为本申请中提供的数据处理方法的第一个流程示意图。如图2所示,数据处理方法包括以下步骤。
在步骤201中,计算机设备获取循环存储队列的第一全局读指针。第一全局读指针指向第一存储区域中的第一子区域。
本申请中的数据处理方法采用了另一种循环存储队列。具体地,循环存储队列分为逻辑上的M个存储区域。M为大于1的整数。每个存储区域在逻辑上连续。每个存储区域对应一个写标识。写标识表征对应的存储区域中已存储的数据的数据大小。例如,图3为本申请中提供的循环存储队列的第一个结构示意图。如图3所示,循环存储队列包括三个存储区域。三个存储区域的空间大小可以相同,也可以不同。三个存储区域分别为存储区域301、存储区域302和存储区域303。三个存储区域对应三个写标识。三个存储区域和三个写标识一一对应。
循环存储队列还包括对应的全局写指针和全局读指针。随着数据的写入和读取,全局写指针和全局读指针的位置沿逻辑方向不断变化。在图3中,逻辑方向为逆时针方向。应理解,在实际应用中,逻辑方向还可以是顺时针方向。循环存储队列是逻辑上的环状空间。因此。全局写指针或全局读指针可以循环的经过相同的区域。根据前面的描述可知,在时域上,全局写指针和全局读指针的位置可能不断发生变化。因此,为了方便描述,在本申请中,不同时刻的全局写指针和全局读指针可能拥有不同的称呼。例如,不同的称呼包括第一全局写指针、第一全局读指针、第二全局写指针、第二全局读指针等。
计算机设备获取循环存储队列的第一全局读指针。第一全局读指针指向第一存储区域中的第一子区域。具体地,第一全局读指针可以指向第一子区域的起始位置。起始位置可以是第一子区域的第一个字节。第一存储区域为M个存储区域中的一个存储区域。在写入数据的过程中,计算机设备以子区域为单位写入数据。例如,存储区域301的总的空间大小为100字节。计算机设备将前40个字节分配给了线程1。计算机设备将后60个字节分配给了线程2。线程1在前40个字节中写入数据。线程2在后60个字节写入数据。此时,前40个字节和后60个字节属于不同的子区域。每个存储区域可以包括一个或多个子区域。第一子区域为一个或多个子区域中任意一个子区域。
在步骤202中,计算机设备获取第一存储区域的第一写标识。
根据前面的描述可知,每个存储区域对应一个写标识。第一存储区域对应第一写标识。第一写标识表征第一存储区域中已存储数据的空间大小。应理解,在本申请中,第一存储区域中已存储数据的空间大小只包括计算机设备在最后一次循环中写入的数据的数据大小。具体地,随着数据的写入,计算机设备循环的分配第一存储区域的存储空间。例如,在第一次循环中,计算机设备将第一存储区域分配给了线程1和线程2。在第二次循环中,计算机设备将第一存储区域分配给了线程1、线程3和线程4。在最后一次循环中,计算机设备将第一存储区域分配给了一个或多个线程。在分配到存储空间中,一个或多个线程在第一存储区域中写入数据。第一写标识用于表征最后一次循环中,一个或多个线程在第一存储区域中写入的数据的数据大小。其中,第一写标识的值是随着线程的commit操作而改变的。例如,第一存储区域包括第一子区域和第二子区域。第一子区域包括40字节。第二子区域包括60字节。在线程1和线程2未写入数据时,第一写标识的值可以是0或100的倍数。假设第一写标识的值是0。线程1在第一子区域写入数据后,线程1执行commit操作。此时,第一写标识变为40。线程1在第二子区域写入数据后,线程2执行commit操作。此时,第二写标识变为100。
在步骤203中,若第一写标识表征的第一存储区域中已存储数据的空间大小等于第一存储区域中已被分配的空间大小,则计算机设备读取第一子区域中的第一数据。
通过第一写标识,计算机设备可以确定第一存储区域的commit状态。commit状态包括完全commit和未完全commit。完全commit表示第一存储区域中已存储数据的空间大小等于已被分配的空间大小。未完全commit表征第一存储区域中已存储数据的空间大小小于已被分配的空间大小。在第一存储区域写入数据前,计算机设备需要将第一存储区域中的存储空间分配给一个或多个线程。根据前面的描述可知,计算机设备循环的在第一存储区域中写入数据。因此,计算机设备循环的将第一存储空间中的存储空间分配给线程。应理解,在本申请中,第一存储区域中已被分配的空间大小只包括计算机设备在最后一次循环中分配的空间大小。
在申请中,第一写标识表征的是已存储数据的空间大小。若已存储数据的空间大小等于已被分配的空间大小,则计算机设备读取第一子区域中的第一数据。第一子区域和第一数据的大小为X字节。X为大于0的整数。若已存储数据的空间大小小于已被分配的空间大小时,则计算机设备不读取第一子区域中的数据。例如,假设第一存储区域中已被分配的空间大小为100字节。其中,线程1分配到了前40个字节。线程2分配到了后60个字节。第一子区域为前40个字节。在线程2执行commit操作后,后60个字节变为已存储数据的空间。此时,已被分配的空间大小不等于已存储数据的空间大小。计算机设备不读取第一子区域中的数据。在线程1执行commit操作后,前40个字节变为已存储数据的空间。此时,已被分配的空间大小为100字节。已被分配的空间大小等于已存储数据的空间大小。计算机设备读取第一子区域中的数据。因此,在第一存储区域中,乱序commit并不会影响对commit状态的判断,即乱序commit不会影响读取的数据的正确性。因此,线程2在第一存储区域中写入数据后,线程2可以不需要等待线程1完成commit操作,从而提高了***的运行效率。
在实际应用中,计算机设备可以通过第一全局写指针确定第一存储区域中已被分配的空间大小。具体地,若第一全局写指针指向第一存储区域以外的存储区域,则计算机设备确定第一存储区域中已被分配的空间大小等于第一存储区域总的空间大小。若第一全局写指针指向第一存储区域中的第二子区域,则计算机设备确定第一存储区域中已被分配的空间大小等于第二子区域的起始位置和第一存储区域的起始位置的差值。例如,第一存储区域包括200个字节。第二子区域的起始位置为200个字节中的第101个字节。此时,计算机设备确定已被分配的空间大小为100字节。
根据前面的描述可知,循环存储队列中的每个存储区域对应一个写标识。写标识用于表征对应的存储区域中已存储数据的空间大小。在实际应用中,每个存储区域还可以对应一个读标识。读标识用于表征对应的存储区域中已被读取的数据的数据大小。例如,第一读标识用于表征第一存储区域中已被读取的数据的数据大小。根据前面的描述可知,全局读指针沿逻辑方向不断移动。因此,全局读指针可以循环的经过同一个存储区域,即计算机设备循环的在同一个存储区域中读取数据。应理解,在本申请中,第一存储区域中已被读取的数据的数据大小只包括计算机设备在最后一次循环中读取的数据的数据大小。
在计算机设备执行前述步骤203之前,计算机设备可以确定第一写标识和第一读标识的大小关系。当第一写标识等于第一读标识时,表征第一存储区域中已被读取的数据的数据大小等于已存储数据的空间大小。此时,第一子区域中还未写入数据。因此,计算机设备无需执行步骤203。当第一写标识小于第一读标识时,表征第一存储区域中已被读取的数据的数据大小小于已存储数据的空间大小,此时,第一子区域中已写入数据。因此,计算机设备执行步骤203。
根据前面的描述可知,第一读标识用于表征第一存储区域中已被读取的数据的数据大小。因此,在读取第一子区域中的数据后,计算机设备可以更新第一读标识。更新后的第一读标识等于第一读标识和X之和。X为第一数据的数据大小。或X为第一子区域的空间大小。
在循环存储队列中,计算机设备以子区域为单位写入和读取数据。例如,在前面的描述中,计算机设备在第一子区域中读取第一数据。因此,在计算机设备在读取第一数据前,计算机设备还在第一子区域中写入第一数据。具体地,计算机设备获取循环存储队列的第二全局写指针。第二全局写指针指向第一存储区域中的第二字节。其中,第二字节为第一子区域的起始位置。应理解,在写入数据时,计算机设备可以根据第一数据的数据大小灵活调整子区域的空间大小。因此,在不同的循环中,每个存储区域中的子区域的数量和空间大小可能是不同的。
若第二字节的位置与第一存储区域的终点位置的差值大于或等于X,则表征第一存储区域中的剩余空间大于第一数据的数据大小。因此,计算机设备从第二字节开始写入第一数据。若第二字节的位置与第一存储区域的终点位置的差值小于X,则表征第一存储区域中的剩余空间小于第一数据的数据大小。计算机设备无法在剩余空间中写入第一数据。
当剩余空间不足时,计算机设备可以为剩余空间添加目标标识。在读取数据前,计算机设备根据目标标识确定是否读取剩余空间中的数据。具体地,图4为本申请中提供的写入数据的方法的第一个流程示意图。其中,本申请中的数据处理方法可以应用于循环存储队列中的数据写入和读取。为了方便描述,本申请将数据处理方法分为写入数据的方法和读取数据的方法。写入数据的方法和读取数据的方法存在一定的关联性。因此,两个方法中的描述可以互相参考。如图4所示,写入数据的方法包括以下步骤。
在步骤401中,计算机设备获取当前全局写指针,根据当前全局写指针确定当前存储区域。循环存储队列的描述可以参考前述图2或图3的相关描述。计算机设备获取循环存储队列当前的全局写指针。当前的全局写指针也称为当前全局写指针。当前全局写指针指向M个存储区域中的当前存储区域。计算机设备可以从循环存储队列的队列头部中获取当前全局写指针。具体地,图5为本申请中提供的循环存储队列的第二个结构示意图。如图5所示,循环存储队列包括3个存储区域。3个存储区域分别为存储区域301、存储区域302和存储区域303。存储区域301包括子区域a1、子区域b1、子区域b2和目标无效子区域502。存储区域302包括子区域b4、子区域b5和剩余空间a2。其中,剩余空间a2可能会被计算机设备分配一个或多个线程。因此,剩余空间a2可能形成多个子区域。存储区域303包括子区域a3、子区域a4和目标无效子区域504。循环存储队列还包括队列头部500。队列头部500可以用于存储全局写指针和全局读指针。在图5中,全局写指针指向存储区域302中的子区域a2。全局读指针指向存储区域301中的子区域b1。
每个存储区域还可以包括对应的区域头部。区域头部用于存储对应的存储区域的读标识和/或写标识。例如,存储区域301包括区域头部501。区域头部501用于存储存储区域301的写标识和/或读标识。类似地,存储区域302包括区域头部503。存储区域303包括区域头部505。
每个存储区域还可以包括对应的初始无效子区域(图中未示出)。当存储区域的空间被完全分配后,全局写指针会指向初始无效子区域。当存储区域的空间被不完全分配后,计算机设备存储区域的剩余区域和初始无效子区域合并,得到无效子区域。例如,存储区域301包括100字节。初始无效子区域包括2字节。若存储区域301的100字节被完全分配,则全局写指针会指向存储区域301的初始无效子区域。计算机设备将初始无效子区域作为无效子区域。当存储区域301的空间被不完全分配后,全局写指针会指向存储区域301的剩余空间。若剩余空间小于将要写入的数据大小,则计算机设备将剩余空间作为目标无效子区域。计算机设备将目标无效子区域和初始无效子区域合并,得到无效子区域。例如,若存储区域301的100字节被不完全分配后,剩余空间包括10字节。10字节的剩余空间小于当前数据(将要写入的数据)的数据大小,则计算机设备可以将10字节作为目标无效子区域。计算机设备将目标无效子区域和初始无效子区域合并,得到无效子区域。此时,无效子区域包括12字节。
在步骤402中,计算机设备根据当前全局写指针和当前数据大小确定当前存储区域是否有足够剩余空间。其中,当前数据大小是当前线程将要写入的当前数据的数据大小。当前全局写指针指向当前存储区域中的当前字节。若当前存储区域的终点位置和当前字节的差值小于当前数据大小,则表征当前存储区域没有足够的剩余空间。若当前存储区域的终点位置和当前字节的差值大于或等于当前数据的数据大小,则表征当前存储区域有足够的剩余空间。若有足够的剩余空间,则计算机设备执行步骤403。若没有足够的剩余空间,则计算机设备执行步骤406。
在步骤403中,计算机设备确定是否抢头成功。其中,在多线程并发的场景,可能存储多个线程竞争写入数据。只有在当前线程抢头成功后,计算机设备才可以从当前字节开始写入当前数据。若当前线程抢头成功,则计算机设备执行步骤404。若抢头成功,则表征计算机设备更新了当前全局写指针。更新后的当前全局写指针指向当前字节的后X个字节。X个当前数据大小。具体地,计算机设备可以通过原子操作更新当前全局写指针。例如,计算机设备可以通过比较并交换(compare and swap,CAS)技术更新当前全局写指针。类似地,在本申请后续更新全局写指针或全局读指针的操作中,计算机设备都可以通过原子操作更新全局写指针或全局读指针。若当前线程抢头失败,则计算机设备执行步骤401。其中,若当前线程抢头失败,则其他线程已经修改了当前全局写指针。因此,计算机设备需要重新执行步骤401。
在步骤404中,计算机设备执行写流程。在抢头成功后,计算机设备在从当前字节开始写入当前数据。当前数据的数据大小为X字节。
在步骤405中,计算机设备更新当前存储空间的当前写标识。根据前面的描述可知,M个存储区域和M个写标识一一对应。当前写标识对应当前存储区域。当前写标识表征当前存储区域已存储的数据的数据大小。计算机设备在当前存储区域中写入当前数据后,计算机设备更新当前写标识。更新后的当前写标识等于当前写标识加X的和。
根据前面的描述可知,计算机设备循环的在当前存储区域中写入数据。因此,当前写标识的值可以不断增大。为了节约存放当前写标识的空间,计算机设备也可以不断对当前写标识进行清零。具体地,在当前写标识的值等于当前存储区域总的空间大小时,计算机设备对当前写标识清零。例如,当前存储区域总的空间大小为100字节。当当前写标识的值等于100时,计算机设备将当前写标识的值设为0。
在步骤406中,计算机设备确定剩余空间是否为无效子区域。计算机设备可以通过目标标识确定剩余空间是否为无效子区域。
例如,目标标识是剩余空间中的比特位全为1。若剩余空间中的比特位全为1,则计算机设备确定剩余空间是无效子区域。若剩余空间中的比特位不全为1,则计算机设备确定剩余空间不是无效子区域。
例如,目标标识是剩余空间的头部中的标识。具体地,对于每个子区域,计算机设备设定一个对应的头部。在计算机设备确定没有足够的剩余空间后,计算机设备将剩余空间作为目标无效子区域。计算机设备在目标无效子区域的头部添加目标标识。目标标识的具体内容可以是某个比特位的值。例如,比特位的值是1时,表征剩余空间是无效子区域。比特位的值是0时,表征剩余空间不是无效子区域。若剩余空间不是无效子区域,则执行步骤407。若剩余空间是无效子区域,则执行步骤408。关于无效子区域的描述,可以参考前述步骤401中的描述。
根据前面的描述可知,若当前存储区域的内存空间被完全分配,则当前全局写指针可能指向当前存储区域对应的初始无效子区域。此时,当前存储区域没有足够的剩余空间。计算机设备确定初始无效子区域为无效子区域。计算机设备执行步骤408。
在步骤407中,计算机设备将剩余空间作为无效子区域。若当前存储区域包括初始无效子区域,则计算机设备将剩余空间和初始无效子区域合并,得到无效子区域。若当前存储区域不包括初始无效子区域,则计算机设备将剩余空间作为无效子区域。若剩余空间没有目标标识,则计算机设备为剩余空间添加目标标识。关于目标标识的描述参考前述步骤406中的描述。
在步骤408中,计算机设备根据当前全局写指针计算下一个存储区域的全局写指针。下一个存储区域是当前存储区域沿逻辑方向上的下一个存储区域。在剩余空间有目标标识时,计算机设备根据当前全局写指针计算下一个存储区域的全局写指针。下一个存储区域的全局写指针指向下一个存储区域。例如,下一个存储区域的全局写指针指向下一个存储区域的起始位置。应理解,此时,计算机设备并未修改当前全局写指针。
在步骤409中,计算机设备根据下一个存储区域的全局写指针确定下一个存储区域是否被分配过。具体地,根据下一个存储区域的全局写指针的格式不同,计算机设备可以有不同的方式确定下一个存储区域是否被分配过。
例如,下一个存储区域的全局写指针记录循环存储队列总的被分配过的空间大小。此时,若下一个存储区域的全局写指针大于循环存储队列总的空间大小,则计算机设备确定下一个存储区域被分配过。若下一个存储区域的全局写指针小于或等于循环存储队列总的空间大小,则计算机设备确定下一个存储区域未被分配过。例如,循环存储队列包括10个存储区域。每个存储区域包括100个字节。经过每一次循环后,计算机设备不对全局写指针清零。此时,若下一个存储区域的全局写指针大于1000,则计算机设备确定下一个存储区域被分配过。若下一个存储区域的全局写指针小于1000,则计算机设备确定下一个存储区域未被分配过。
例如,图6为本申请中提供的全局写指针的结构示意图。如图6所示,当前全局写指针包括当前写区域指针601和当前区域内写偏移指针602。当前写区域指针601用于表征当前存储区域。假设循环存储队列包括10个存储区域。计算机设备从10个存储区域中的第一个存储区域开始写入数据。当当前写区域指针601为1时,表征当前存储区域为10个存储区域中的第一个存储区域。当当前写区域指针601为2时,表征当前存储区域为10个存储区域中的第二个存储区域。若计算机设备不对当前写区域指针清零,则随着循环的增加,当前写区域指针601会大于10。例如,当当前写区域指针601为11时,表征当前存储区域为10个存储区域中的第一个存储区域。当当前写区域指针601为12时,表征当前存储区域为10个存储区域中的第二个存储区域。下一个存储区域的全局写指针简称为下一个全局写指针。若下一个全局写指针的写区域指针大于存储区域的个数M,则计算机设备确定下一个存储区域被分配过。若下一个全局写指针的写区域指针小于或等于存储区域的个数M,则计算机设备确定下一个存储区域未被分配过。若下一个存储区域被分配过,则计算机设备执行步骤410。若下一个存储区域未被分配过,则计算机设备执行步骤412。
当前区域内写偏移指针602用于表征当前字节对当前存储区域的起始位置的偏移量。假设当前存储区域包括100个字节。100个字节按照逻辑方向排序。当当前区域内写偏移指针602等于5时,表征当前字节为100个字节中的第五个字节。当当前区域内写偏移指针602等于6时,表征当前字节为100个字节中的第六个字节。若计算机设备不对当前区域内写偏移指针602清零,则随着循环的增加,当前区域内写偏移指针602会大于100。例如,当当前区域内写偏移指针602等于105时,表征当前字节为100个字节中的第五个字节。在其中的一个示例中,当前全局写指针包括64位比特。当前写区域指针601包括64位比特中的前48位比特。当前区域内写偏移指针602包括64位比特中的后16位比特。
在步骤410中,计算机设备确定下一个存储区域是否被完全写入。根据前述对循环存储队列的描述可知,每个存储区域对应一个写标识。因此,下一个存储区域对应下一个写标识。计算机设备可以获取下一个写标识。下一个写标识表征最后一个循环中已存入的数据的数据大小。例如,假设下一个存储区域包括100个字节。当下一个写标识等于40时,表征下一个存储区在最后一个循环中已存入的数据的数据大小为40字节。应理解,若计算机设备不对下一个写标识清零,则随着循环的增加,下一个写标识的值会大于下一个存储区域的总的空间大小。例如,当下一个写标识等于140时,表征下一个存储区在最后一个循环中已存入数据的为40字节。
若下一个写标识除以下一个存储区域的总的空间大小等于整数,则计算机设备确定下一个存储区域被完全写入。例如,下一个存储区域的总的空间大小为100字节。当下一个写标识等于200时,计算机设备确定下一个存储区域被完全写入。若下一个写标识除以下一个存储区域的总的空间大小不等于整数,则计算机设备确定下一个存储区域未被完全写入。例如,下一个存储区域的总的空间大小为100字节。当下一个写标识等于205时,计算机设备确定下一个存储区域未被完全写入。若下一个存储区域未被完全写入,则计算机设备执行步骤411。若下一个存储区域被完全写入,则计算机设备执行步骤412。
其中,在最后一次循环后,若100个字节被分配出去后,100个字节都未被执行commit操作。此时,下一个存储区域未被完全写入。但是下一个写标识除以下一个存储区域的总的空间大小仍可能等于整数。因此,为了避免这种情况的发生,计算机设备可以获取当前全局读指针。若当前全局读指针指向下一个存储区域以外的存储区域,下一个写标识除以下一个存储区域的总的空间大小等于整数,则计算机设备确定下一个存储区域被完全写入。若当前全局读指针指向下一个存储区域,或下一个存储区域写标识除以下一个存储区域存储区域的总的空间大小不等于整数,则计算机设备确定下一个存储区域未被完全写入。
在步骤411中,结束。其中,结束可以是指计算机设备中的当前线程放弃存储当前数据,或者计算机设备中的当前线程回到步骤401。
在步骤412中,计算机设备确定当前全局写指针是否被修改。在前述步骤401中,计算机设备获取了当前全局写指针。在多线程并发的场景中,可能存在其它线程已经修改了当前全局写指针。例如存在其它线程完成了后续的步骤414。因此,计算机设备在此处再次获取当前全局写指针。若两次获取的当前全局写指针相同,则计算机设备确定当前全局写指针未被修改。若两次获取的当前全局写指针不同,则计算机设备确定当前全局写指针未被修改。若当前全局写指针未被修改,则执行步骤413。若当前全局写指针被修改,则执行步骤401。
在步骤413中,计算机设备将下一个存储区域的写标识清零。下一个存储区域对应下一个写标识。
在步骤414中,计算机设备将下一个存储区域的全局写指针作为当前全局写指针。
应理解,为了方便描述,在图4中的流程图中,采用了当前全局写指针、当前写标识、当前存储区域和当前全局读指针等描述。在实际应用中,可以将“当前”修改为“第一”、“第二”或“第三”等描述。例如,当前全局写指针可以为第一全局写指针、第二全局写指针或第三全局写指针等。例如,当前存储区域可以为第一存储区域或第二存储区域等。
前面对本申请中的写入数据的方法进行描述。下面对本申请中读取数据的方法进行描述。具体地,图7为本申请中提供的读取数据的方法的第一个流程示意图。如图7所示,写入数据包括以下步骤。
在步骤701中,计算机设备获取当前全局读指针,根据当前全局读指针确定当前存储区域。循环存储队列的描述可以参考前述图2至图4中的相关描述。计算机设备的当前线程获取循环存储队列当前的全局读指针。当前的全局读指针也称为当前全局读指针。当前全局读指针指向M个存储区域中的当前存储区域的当前子区域。例如,当前全局读指针指向当前子区域的起始位置。起始位置为当前字节。计算机设备可以从循环存储队列的队列头部中获取当前全局读指针。
在步骤702中,计算机设备确定当前存储区域是否被覆盖写。根据前述图4的描述可知,当前全局写指针包括当前写区域指针和当前区域内写偏移指针。类似的,当前全局读指针也可以包括当前读区域指针和当前区域内读偏移指针。当前读区域指针用于表征当前存储区域。当前区域内读偏移指针用于表征当前字节对当前存储区域的起始位置的偏移量。关于当前读区域指针和当前区域内读偏移指针的描述,可以参考前述当前写区域指针和当前区域内写偏移指针的相关描述。应理解,当前全局写指针指向的当前存储区域和当前全局读指针指向的当前存储区域可以是一个存储区域,也可以不是同一个区域。若当前写区域指针和当前读区域指针的差值大于M,则计算机设备确定当前存储区域被覆盖写。若当前写区域指针和当前读区域指针的差值小于或等于M,则计算机设备确定当前存储区域未被覆盖写。若当前存储区域未被覆盖写,则执行步骤704。若当前存储区域被覆盖写,则执行步骤703。
在步骤703中,计算机设备将当前读标识清零。计算机设备更新当前全局读指针。
当前存储区域对应当前写标识和当前读标识。为了提高写入数据的效率,计算机设备在写入数据时,可能会覆盖还未被读取的数据。此时,计算机设备的当前读标识无法被正常更新。计算机设备无法通过后续的步骤704确定是否执行步骤706。因此,在前述图4的步骤413中,计算机设备将当前写标识清零。在此步骤中,计算机设备将当前读标识清零。
若当前读区域指针和当前写区域指针的差值大于M,则表征当前存储区域被覆盖写。若计算机设备仍然从当前字节开始读取数据,则会丢失当前全局写指针到当前字节之间的数据。为此,计算机设备更新当前全局读指针。更新后的当前读区域指针等于当前写区域指针和Z的差值。其中,Z=M-1。
在步骤704中,计算机设备确定当前写标识是否大于当前读标识。若当前写标识大于当前读标识,则表征当前子区域已经被写入未被读取的数据,计算机设备可以读取当前子区域中的数据。若当前写标识小于或等于当前读标识,则表征当前子区域未被写入未被读取的数据,计算机设备无法读取当前子区域中的数据。因此,若当前写标识等于当前读标识,则计算机设备执行步骤705。若当前写标识大于当前读标识,则计算机设备执行步骤706。
在步骤705中,结束。其中,结束可以是指计算机设备中的当前线程放弃存储当前数据,或者计算机设备中的当前线程回到步骤701。
在步骤706中,计算机设备确定当前全局写指针是否指向当前存储区域。其中,关于当前全局写指针的描述可以参考前述图4中的当前全局写指针的描述。例如,当前全局写指针包括当前写区域指针和当前区域内写偏移指针。假设循环存储队列包括10个存储区域。当前存储区域为10个存储区域中的第一个存储区域。当当前写区域指针除以10的余数等于1时,表征当前全局写指针指向当前存储区域。例如,当前写区域指针等于1、11或21等。当当前写区域指针除以10的余数不等于1时,表征当前全局写指针不指向当前存储区域。例如,当前写区域指针等于3、4或23等。当当前全局写指针指向当前存储区域时,计算机设备执行步骤707。当当前全局写指针不指向当前存储区域时,计算机设备执行步骤709。
在步骤707中,计算机设备确定当前全局写指针中的当前区域内写偏移指针是否等于当前写标识。若当前区域内写偏移指针不等于当前写标识,则表征当前存储区域的commit状态为未完全commit。若当前区域内写偏移指针等于当前写标识,则表征当前存储区域的commit状态为完全commit。关于commit状态的描述可以参考前述图2中的相关描述。因此,若当前区域内写偏移指针不等于当前写标识,则计算机设备执行步骤708。若当前区域内写偏移指针等于当前写标识,则计算机设备执行步骤710。其中,当前区域内写偏移指针指向当前存储区域中第一字节。第一字节为当前存储区域中除了当前字节以外的任意一个字节。
在步骤708中,结束。其中,结束可以是指计算机设备中的当前线程放弃存储当前数据,或者计算机设备中的当前线程回到步骤701。
在步骤709中,计算机设备确定当前存储区域是否被完全写入。若当前写标识除以当前存储区域的总的空间大小等于整数,则计算机设备确定当前存储区域被完全写入。例如,当前存储区域的总的空间大小为100字节。当当前写标识等于200时,计算机设备确定当前存储区域被完全写入。若当前写标识除以当前存储区域的总的空间大小不等于整数,则计算机设备确定当前存储区域未被完全写入。例如,当前存储区域的总的空间大小为100字节。当当前写标识等于205时,计算机设备确定当前存储区域未被完全写入。若当前存储区域未被完全写入,则表征在最后一个循环中,当前存储区域中存在空间未被执行commit操作。若当前存储区域被完全写入,则表征在最后一个循环中,当前存储区域中的在所有空间都被执行了commit操作。因此,若当前存储区域未被完全写入,则计算机设备执行步骤705。若当前存储区域被完全写入,则计算机设备执行步骤710。
在步骤710中,计算机设备确定当前子区域是否属于无效子区域。根据前面的描述可知,当前全局读指针指向当前子区域。若当前子区域不属于无效子区域,则计算机设备执行步骤711。若当前子区域属于无效子区域,则执行步骤712。关于无效子区域的描述,可以参考前述图4中的相关描述。例如,计算机设备可以通过目标标识确定当前子区域是否为属于无效子区域。若当前子区域包括对应的目标标识,则计算机设备确定当前子区域属于无效子区域。若当前子区域不包括对应的目标标识,则计算机设备确定当前子区域不属于无效子区域。
在步骤711中,计算机设备读取当前子区域中的当前数据。
在步骤712中,计算机设备确定当前存储区域是否被覆盖写。若当前全局写指针移动,则当前存储区域可能被覆盖写。因此,计算机设备再次确定当前存储区域是否被覆盖写。具体地,计算机设备获取当前写区域指针和当前写区域指针。若当前写区域指针和当前读区域指针的差值大于M,则计算机设备确定当前存储区域被覆盖写。若当前写区域指针和当前读区域指针的差值小于或等于M,则计算机设备确定当前存储区域未被覆盖写。若当前存储区域未被覆盖写,则计算机设备执行步骤713。若当前存储区域被覆盖写,则计算机设备执行步骤703。
在步骤713中,计算机设备确定当前子区域是否属于无效子区域。若当前子区域属于无效子区域,则执行步骤715。若当前子区域不属于无效子区域,则执行步骤714。
在步骤714中,计算机设备更新全局读指针和当前读标识。更新后的当前全局读指针指向当前子区域的下一个子区域。更新后的当前读标识等于当前读标识和X的和。其中,X为计算机设备读取的当前数据的数据大小。
在步骤715中,计算机设备确定当前写区域指针是否大于当前读区域指针。若当前写区域指针大于当前读区域指针,则计算机设备执行步骤717。若当前写区域指针小于或等于当前读区域指针,则计算机设备执行步骤716。
在步骤716中,结束。其中,结束可以是指计算机设备中的当前线程放弃存储当前数据,或者计算机设备中的当前线程回到步骤701。
在步骤717中,计算机设备更新当前全局读指针。计算机设备将当前读标识清零。更新后的当前全局读指针指向当前存储区域的下一个存储区域。具体地,更新后的当前全局读指针指向下一个存储区域的第一个子区域。
应理解,为了方便描述,在图7中的流程图中,采用了当前全局写指针、当前写标识、当前存储区域和当前全局读指针等描述。在实际应用中,可以将“当前”修改为“第一”、“第二”或“第三”等描述。例如,当前全局读指针可以为第一全局读指针、第二全局读指针等。例如,当前存储区域可以为第一存储区域或第二存储区域等。
应理解,在前述图4的描述中,当前全局写指针对应当前存储区域。在前述图7的描述中,当前全局读指针对应当前存储区域。两个当前存储区域可以是同一个存储区域,也可以不是同一个存储区域。
应理解,前述图4为写入数据的方法的流程图,图7为读取数据的方法的流程图。在循环存储队列中,写入数据和读取数据是相互关联的。因此,关于关于图7中的描述,可以参考图4中的描述。关于图4中的描述,可以参考图7中的描述。
在实际应用中,每个存储区域还可以包括对应的写区域标识和读区域标识。例如,当前存储区域对应当前写区域标识和当前读区域标识。当前写区域标识等于当前写区域指针。当前写区域标识和当前写标识可以记录在一个字段中。例如,一个字段包括64比特。当前写区域标识包括64比特中的前48比特。当前写标识包括64比特中的后16比特。类似地,当前读区域标识等于当前读区域指针。当前读区域标识和当前读标识可以记录在一个字段中。例如,一个字段包括64比特。当前读区域标识包括64比特中的前48比特。当前读标识包括64比特中的后16比特。当前写区域标识和当前读区域标识可以用于避免CAS中的ABA问题。
在图4的写入数据的方法中,计算机设备可能覆盖未被读取的数据,造成数据丢失。在某些场景中,丢失数据可能造成严重的后果。为此,本申请提供了另一个写入数据的方法。在该方法中,计算机设备不覆盖未被读取的数据。具体地,图8为本申请中提供的写入数据的方法的第二个流程示意图。如图8所示,写入数据包括以下步骤。
在步骤801中,计算机设备获取当前全局写指针,根据当前全局写指针确定当前存储区域。
在步骤802中,计算机设备根据当前全局写指针和当前数据大小确定当前存储区域是否有足够剩余空间。若有足够的剩余空间,则计算机设备执行步骤803。若没有足够的剩余空间,则计算机设备执行步骤806。
在步骤803中,计算机设备确定是否抢头成功。若抢头成功,则计算机设备执行步骤804。若抢头失败,则计算机设备执行步骤801。
在步骤804中,计算机设备执行写流程。
在步骤805中,计算机设备更新当前存储空间的当前写标识。
在步骤806中,计算机设备确定剩余空间是否为无效子区域。若剩余空间不是无效子区域,则执行步骤807。若剩余空间是无效子区域,则执行步骤808。
在步骤807中,计算机设备将剩余空间作为无效子区域。
在步骤808中,计算机设备根据当前全局写指针计算下一个存储区域的全局写指针。
在步骤809中,计算机设备根据下一个存储区域的全局写指针确定下一个存储区域是否被分配过。若下一个存储区域被分配过,则计算机设备执行步骤810。若下一个存储区域未被分配过,则计算机设备执行步骤812。
在步骤810中,计算机设备确定下一个存储区域是否被完全写入。若下一个存储区域未被完全写入,则计算机设备执行步骤811。若下一个存储区域被完全写入,则计算机设备执行步骤812。
在步骤811中,结束。
在步骤812中,计算机设备确定下一个存储区域是否被完全读取。根据前述对循环存储队列的描述可知,每个存储区域对应一个读标识。因此,下一个存储区域对应下一个读标识。计算机设备可以获取下一个读标识。下一个读标识表征最后一次循环中在下一个存储区域中已读取数据的数据大小。例如,假设下一个存储区域包括100个字节。当下一个读标识等于40时,表征下一个存储区在最后一个循环中已读取数据的数据大小为40字节。应理解,若计算机设备不对下一个读标识清零,则随着循环的增加,下一个读标识的值会大于下一个存储区域的总的空间大小。例如,当下一个读标识等于140时,表征下一个存储区在最后一个循环中已读取数据的数据大小为40字节。
若下一个读标识除以下一个存储区域的总的空间大小等于整数,则计算机设备确定下一个存储区域被完全读取。例如,下一个存储区域的总的空间大小为100字节。当下一个读标识等于200时,计算机设备确定下一个存储区域被完全读取。若下一个读标识除以下一个存储区域的总的空间大小不等于整数,则计算机设备确定下一个存储区域未被完全读取。例如,下一个存储区域的总的空间大小为100字节。当下一个读标识等于205时,计算机设备确定下一个存储区域未被完全读取。若下一个存储区域未被完全读取,则计算机设备执行步骤811。若下一个存储区域被完全读取,则计算机设备执行步骤813。
在步骤813中,计算机设备将下一个存储区域的全局写指针作为当前全局写指针。
应理解,图8和图4存在类似的步骤。因此,关于图8的描述,可以参考图4中的描述。例如关于步骤801至步骤811的描述,可以参考前述图4中的步骤401至步骤411。关于步骤813的描述,可以参考步骤414的描述。并且,步骤812和步骤810之间并没有严格的时序限定。例如,计算机设备可以先执行步骤812。若下一个存储区域被完全读取,则计算机设备执行步骤810。
前面对本申请中的写入数据的方法进行描述。下面对本申请中读取数据的方法进行描述。具体地,图9为本申请中提供的读取数据的方法的第二个流程示意图。如图9所示,读取数据的方法包括以下步骤。
在步骤901中,计算机设备获取当前全局读指针,根据当前全局读指针确定当前存储区域。
在步骤902中,计算机设备确定当前写标识是否大于当前读标识。若当前写标识大于当前读标识,则计算机设备执行步骤904。若当前写标识小于或等于当前读标识,则计算机设备执行步骤903。
在步骤903中,结束。
在步骤904中,计算机设备确定当前全局写指针是否指向当前存储区域。若当前全局写指针指向当前存储区域,则计算机设备执行步骤905。若当前全局写指针当前存储区域以外的存储区域,则计算机设备执行步骤907。
在步骤905中,计算机设备确定当前区域内写偏移指针是否等于当前写标识。若当前区域内写偏移指针不等于当前写标识,则计算机设备执行步骤906。若当前区域内写偏移指针等于当前写标识,则计算机设备执行步骤908。
在步骤906中,结束。
在步骤907中,计算机设备确定当前存储区域是否被完全写入。若当前存储区域未被完全写入,则计算机设备执行步骤903。若当前存储区域被完全写入,则计算机设备执行步骤908。
在步骤908中,计算机设备确定当前全局读指针是否被修改。在前述步骤901中,计算机设备获取了当前全局读指针。在多线程并发的场景中,可能存在其它线程已经修改了当前全局读指针。例如存在其它线程完成了后续的步骤910。因此,计算机设备再次获取当前全局读指针。若两次获取的当前全局读指针相同,则计算机设备确定当前全局读指针未被修改。若两次获取的当前全局读指针不同,则计算机设备确定当前全局读指针未被修改。若当前全局读指针未被修改,则计算机设备执行步骤909。若当前全局读指针被修改,则计算机设备执行步骤906。
在步骤909中,计算机设备确定当前子区域是否属于无效子区域。根据前面的描述可知,当前全局读指针指向当前子区域。若当前子区域不属于无效子区域,则计算机设备执行步骤910。若当前子区域属于无效子区域,则计算机设备执行步骤912。
在步骤910中,计算机设备读取当前子区域中的当前数据。计算机设备的当前线程执行抢头操作。若抢头成功,则计算机设备读取当前子区域中的当前数据。抢头成功则表征计算机设备更新了当前全局读指针。更新后的当前全局读指针指向当前子区域的下一个子区域的第一个字节。计算机设备将更新后的当前全局读指针作为当前全局读指针。若抢头失败,则计算机设备执行步骤906。
在步骤911中,计算机设备更新当前读标识。更新后的当前读标识等于当前数据的数据大小和当前读标识之和。例如,当前读标识等于250。当前数据的数据大小为40字节。则更新后的当前读标识等于290。
在步骤912中,计算机设备确定当前写区域指针是否大于当前读区域指针。若当前写区域指针大于当前读区域指针,则计算机设备执行步骤913。若当前写区域指针小于或等于当前读区域指针,则计算机设备执行步骤903。
在步骤913中,计算机设备更新当前全局读指针和当前全局读指针。更新后的当前全局读指针指向当前存储区域的下一个存储区域。具体地,更新后的当前全局读指针指向下一个存储区域的第一个子区域。计算机设备更新当前全局读指针。更新后的当前全局读指针等于当前全局读指针和目标无效子区域的空间大小之和。关于目标无效子区域的描述,可以参考前述图4中的相关描述。
应理解,图9和图7存在部分类似的步骤。因此,关于图9中的描述,可以参考前述图7中的描述。例如,关于步骤901的描述,可以参考前述图7中步骤701中的描述。关于步骤902至步骤907的描述,可以参考前述步骤704至步骤709中的描述。关于步骤907的描述可以参考前述步骤713的描述。关于步骤910和步骤911的描述,可以参考前述步骤714的描述。关于步骤912的描述,可以参考前述步骤715的描述。
前面对本申请中的数据处理方法进行描述,下面对本申请中的数据处理装置进行描述。图10为本申请中提供的数据处理装置的结构示意图。如图10所示,数据处理装置1000包括第一获取模块1001、第二获取模块1002、处理模块1003和读取模块1004。第一获取模块1001用于获取循环存储队列的第一全局读指针。循环存储队列包括M个存储区域。M为大于1的整数。第一全局读指针指向M个存储区域中的第一存储区域。第二获取模块1002用于获取第一存储区域的第一写标识。第一写标识表征第一存储区域中已存储数据的空间大小。处理模块1003用于确定第一存储区域中已被分配的空间大小。读取模块1004用于若满足第一条件,则读取第一子区域中的第一数据。第一条件包括:第一存储区域中已存储数据的空间大小等于第一存储区域中已被分配的空间大小。
在其他实施例中,数据处理装置1000还可以包括更新模块、清零模块等。程序运行装置中的模块具体用于执行图2、图4、图7、图8或图9对应的实施例中的计算机设备可以执行的全部或部分操作。
上面对本申请中的数据处理装置进行描述,下面对本申请实施例中的计算机设备进行描述。图11为本申请中提供的计算机设备的结构示意图。本申请中的计算机设备1100可以是台式电脑,笔记本,智能手机、交换机、基站等。如图11所示,计算机设备1100包括处理器1101和存储器1103。
其中,处理器1101可以是中央处理器(central processing unit,CPU),网络处理器(network processor,NP)或者CPU和NP的组合。处理器1101还可以进一步包括硬件芯片或其他通用处理器。上述硬件芯片可以是专用集成电路(application specificintegrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(genericarray logic,GAL)及其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等或其任意组合。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器1103可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)等。
存储器1103中存储有循环存储队列的第一全局读指针。循环存储队列包括M个存储区域。M为大于1的整数。第一全局读指针指向M个存储区域中的第一存储区域。存储器1103中还存储有第一存储区域的第一写标识。第一写标识表征第一存储区域中已存储数据的空间大小。处理器1101用于确定第一存储区域中已被分配的空间大小。处理器1101用于若满足第一条件,则读取第一子区域中的第一数据。第一条件包括:第一存储区域中已存储数据的空间大小等于第一存储区域中已被分配的空间大小。
在其他实施例中,计算机设备还包括收发器1102。收发器1102可以是光纤收发器,无线射频模块等。
在其他实施例中,存储器1103中存储有可供处理器1101执行的计算机程序。当处理器1101读取并执行计算机程序时,可以执行上述图2、图4、图7、图8或图9中数据处理方法中可以执行的全部或部分操作。
本申请还提供一种数字处理芯片。该数字处理芯片中集成了用于实现上述处理器1101的功能的电路和一个或者多个接口。当该数字处理芯片中集成了存储器时,该数字处理芯片可以完成前述实施例中的任意一个或多个实施例的方法步骤。当该数字处理芯片中未集成存储器时,可以通过接口与外置的存储器连接。该数字处理芯片根据外置的存储器中存储的程序代码来实现上述图2、图4、图7、图8或图9中的数据处理方法。
以上,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。
Claims (21)
1.一种数据处理方法,其特征在于,包括:
获取循环存储队列的第一全局读指针,所述循环存储队列包括M个存储区域,M为大于1的整数,所述第一全局读指针指向所述M个存储区域中的第一存储区域的第一子区域;
根据所述循环存储队列的第一全局写指针确定所述第一存储区域中已被分配的空间大小;
其中,若所述第一全局写指针指向所述第一存储区域以外的存储区域,则确定所述第一存储区域中已被分配的空间大小等于所述第一存储区域总的空间大小;
和/或,若所述第一全局写指针指向所述第一存储区域,则确定所述第一存储区域中已被分配的空间大小等于第一字节的位置和所述第一存储区域的起始位置的差值,所述第一全局写指针指向所述第一存储区域中的所述第一字节;
获取所述第一存储区域的第一写标识,所述第一写标识表征所述第一存储区域中已存储数据的空间大小;
若满足第一条件,则读取所述第一子区域中的第一数据;
所述第一条件包括:所述第一存储区域中已存储数据的空间大小等于所述第一存储区域中已被分配的空间大小。
2.根据权利要求1所述的方法,其特征在于,在读取所述第一子区域中的所述第一数据前,所述方法还包括:
获取所述第一存储区域的第一读标识,所述第一读标识表征所述第一存储区域中已被读取的数据的数据大小;
确定所述第一写标识和所述第一读标识的大小关系;
所述第一条件还包括:所述第一写标识大于所述第一读标识。
3.根据权利要求1或2所述的方法,其特征在于,所述第一子区域和所述第一数据的大小为X字节,X为大于0的整数;
在读取所述第一子区域中的所述第一数据后,所述方法还包括:
通过所述X更新所述第一存储区域的第一读标识,更新后的所述第一读标识等于所述第一读标识和所述X之和。
4.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
获取所述循环存储队列的第二全局写指针,所述第二全局写指针指向所述第一存储区域中的第二字节,所述第二字节为所述第一存储区域的起始位置;
若所述第二字节的位置与所述第一存储区域的终点位置的差值大于或等于所述X,则在所述第一子区域中写入所述第一数据。
5.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
获取所述循环存储队列的第三全局写指针,所述第三全局写指针指向所述第一存储区域的第三字节;
获取待写入的第二数据的大小,所述第二数据的大小为N字节;
若所述第三字节的位置与所述第一存储区域的终点位置表征所述第一存储区域的剩余区域小于所述N字节,则为所述剩余区域添加目标标识,所述目标标识用于表征所述剩余区域为无效子区域。
6.根据权利要求1或2所述的方法,其特征在于,在读取所述第一子区域中的所述第一数据前,所述方法还包括:
确定所述第一子区域中是否为无效子区域;
所述第一条件还包括:所述第一子区域不是无效子区域。
7.根据权利要求5所述的方法,其特征在于,所述方法还包括:
若满足第二条件,则更新所述第三全局写指针,更新后的所述第三全局写指针指向第二存储区域,所述第二存储区域为所述第一存储区域的下一个存储区域;
所述第二条件包括:
所述第二存储区域未被分配过,或第三全局读指针指向所述第二存储区域以外的存储区域,所述第二存储区域的第二写标识除以所述第二存储区域的总的空间大小等于整数,所述第二写标识表征所述第二存储区域中已存储数据的空间大小。
8.根据权利要求7所述的方法,其特征在于,在更新所述第三全局写指针前,所述方法还包括:
将所述第二写标识清零;
所述第一全局读指针包括第一读区域指针和第一区域内读偏移指针,所述第一读区域指针指向所述第一存储区域,所述第一区域内读偏移指针指向所述第一存储区域中的第二字节,所述第一全局写指针包括第一写区域指针和第一区域内写偏移指针;
在读取所述第一子区域中的所述第一数据后,所述方法还包括:
若所述第一读区域指针和所述第一写区域指针的差值大于所述M,则将所述第一读标识清零。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
若所述第一读区域指针和所述第一写区域指针的差值大于所述M,则更新所述第一读区域指针,更新后的所述第一读区域指针等于所述第一写区域指针和Z的差值,Z=M-1。
10.根据权利要求7所述的方法,其特征在于,
所述第二条件还包括:所述第二存储区域的第二读标识除以所述第二存储区域的总的空间大小等于整数,所述第二读标识表征所述第二存储区域中已被读取的数据的数据大小。
11.一种数据处理装置,其特征在于,包括:
第一获取模块,用于获取循环存储队列的第一全局读指针,所述循环存储队列包括M个存储区域,M为大于1的整数,所述第一全局读指针指向所述M个存储区域中的第一存储区域的第一子区域;
处理模块用于确定所述第一存储区域中已被分配的空间大小包括:
所述处理模块用于若所述第一全局写指针指向所述第一存储区域以外的存储区域,则确定所述第一存储区域中已被分配的空间大小等于所述第一存储区域总的空间大小;
和/或,所述处理模块用于若所述第一全局写指针指向所述第一存储区域,则确定所述第一存储区域中已被分配的空间大小等于第一字节的位置和所述第一存储区域的起始位置的差值,所述第一全局写指针指向所述第一存储区域中的所述第一字节;
第二获取模块,用于获取所述第一存储区域的第一写标识,所述第一写标识表征所述第一存储区域中已存储数据的空间大小;
所述处理模块,用于确定所述第一存储区域中已被分配的空间大小;
读取模块,用于若满足第一条件,则读取所述第一子区域中的第一数据;
所述第一条件包括:所述第一存储区域中已存储数据的空间大小等于所述第一存储区域中已被分配的空间大小。
12.根据权利要求11所述的装置,其特征在于,
所述第一获取模块还用于获取所述第一存储区域的第一读标识,所述第一读标识表征所述第一存储区域中已被读取的数据的数据大小;
所述处理模块还用于确定所述第一写标识和所述第一读标识的大小关系;
所述第一条件还包括:所述第一写标识大于所述第一读标识。
13.根据权利要求11或12所述的装置,其特征在于,所述第一子区域和所述第一数据的大小为X字节,X为大于0的整数;
所述装置还包括:
更新模块,用于通过所述X更新所述第一存储区域的第一读标识,更新后的所述第一读标识等于所述第一读标识和所述X之和。
14.根据权利要求11或12所述的装置,其特征在于,
所述第一获取模块还用于获取所述循环存储队列的第二全局写指针,所述第二全局写指针指向所述第一存储区域中的第二字节,所述第二字节为所述第一存储区域的起始位置;
所述装置还包括:
写入模块,用于若所述第二字节的位置与所述第一存储区域的终点位置的差值大于或等于所述X,则在所述第一子区域中写入所述第一数据。
15.根据权利要求11或12所述的装置,其特征在于,
所述第一获取模块还用于获取所述循环存储队列的第三全局写指针,所述第三全局写指针指向所述第一存储区域的第三字节;
所述第一获取模块还用于获取待写入的第二数据的大小,所述第二数据的大小为N字节;
所述装置还包括:
添加模块,用于若所述第三字节的位置与所述第一存储区域的终点位置表征所述第一存储区域的剩余区域小于所述N字节,则为所述剩余区域添加目标标识,所述目标标识用于表征所述剩余区域内为无效子区域。
16.根据权利要求11或12所述的装置,其特征在于,
所述处理模块还用于确定所述第一子区域是否为无效子区域;
所述第一条件还包括:所述第一子区域不是无效子区域。
17.根据权利要求15所述的装置,其特征在于,所述装置还包括:
更新模块,用于若满足第二条件,则更新所述第三全局写指针,更新后的所述第三全局写指针指向第二存储区域,所述第二存储区域为所述第一存储区域的下一个存储区域;
所述第二条件包括:
所述第二存储区域未被分配过,或第三全局读指针指向所述第二存储区域以外的存储区域,所述第二存储区域的第二写标识除以所述第二存储区域的总的空间大小等于整数,所述第二写标识表征所述第二存储区域中已存储数据的空间大小。
18.根据权利要求17所述的装置,其特征在于,所述装置还包括:
清零模块,用于将所述第二写标识清零;
所述第一全局读指针包括第一读区域指针和第一区域内读偏移指针,所述第一读区域指针指向所述第一存储区域,所述第一区域内读偏移指针指向所述第一存储区域中的第二字节,所述第一全局写指针包括第一写区域指针和第一区域内写偏移指针;
所述清零模块还用于若所述第一读区域指针和所述第一写区域指针的差值大于所述M,则将所述第一存储区域中的第一读标识清零。
19.根据权利要求18所述的装置,其特征在于,
所述更新模块还用于若所述第一读区域指针和所述第一写区域指针的差值大于所述M,则更新所述第一读区域指针,更新后的所述第一读区域指针等于所述第一写区域指针和Z的差值,Z=M-1。
20.根据权利要求17所述的装置,其特征在于,
所述第二条件还包括:所述第二存储区域的第二读标识除以所述第二存储区域的总的空间大小等于整数,所述第二读标识表征所述第二存储区域中已被读取的数据的数据大小。
21.一种计算机设备,其特征在于,包括:存储器和处理器;
所述存储器中存储有循环存储队列的第一全局读指针,所述循环存储队列包括M个存储区域,M为大于1的整数,所述第一全局读指针指向所述M个存储区域中的第一存储区域;
所述处理器用于确定所述第一存储区域中已被分配的空间大小包括:
所述处理器用于若所述第一全局写指针指向所述第一存储区域以外的存储区域,则确定所述第一存储区域中已被分配的空间大小等于所述第一存储区域总的空间大小;
和/或,所述处理器用于若所述第一全局写指针指向所述第一存储区域,则确定所述第一存储区域中已被分配的空间大小等于第一字节的位置和所述第一存储区域的起始位置的差值,所述第一全局写指针指向所述第一存储区域中的所述第一字节;
所述存储器中还存储有所述第一存储区域的第一写标识,所述第一写标识表征所述第一存储区域中已存储数据的空间大小;
所述处理器用于确定所述第一存储区域中已被分配的空间大小;
所述处理器用于若满足第一条件,则读取第一子区域中的第一数据;
所述第一条件包括:所述第一存储区域中已存储数据的空间大小等于所述第一存储区域中已被分配的空间大小。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111015761.0A CN115934023B (zh) | 2021-08-31 | 2021-08-31 | 数据处理方法、数据处理装置以及相关设备 |
EP22863077.8A EP4386539A1 (en) | 2021-08-31 | 2022-08-11 | Data processing method, data processing apparatus, and related device |
PCT/CN2022/111739 WO2023029937A1 (zh) | 2021-08-31 | 2022-08-11 | 数据处理方法、数据处理装置以及相关设备 |
US18/589,722 US20240201907A1 (en) | 2021-08-31 | 2024-02-28 | Data processing method, data processing apparatus, and related device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111015761.0A CN115934023B (zh) | 2021-08-31 | 2021-08-31 | 数据处理方法、数据处理装置以及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115934023A CN115934023A (zh) | 2023-04-07 |
CN115934023B true CN115934023B (zh) | 2024-06-18 |
Family
ID=85411930
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111015761.0A Active CN115934023B (zh) | 2021-08-31 | 2021-08-31 | 数据处理方法、数据处理装置以及相关设备 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20240201907A1 (zh) |
EP (1) | EP4386539A1 (zh) |
CN (1) | CN115934023B (zh) |
WO (1) | WO2023029937A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117407148B (zh) * | 2022-07-08 | 2024-06-18 | 华为技术有限公司 | 数据写入方法、读取方法、装置、电子设备以及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110704335A (zh) * | 2019-09-03 | 2020-01-17 | 苏州浪潮智能科技有限公司 | 一种基于异步环形缓冲区的数据读取、写入方法及装置 |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7500050B2 (en) * | 2006-03-20 | 2009-03-03 | International Business Machines Corporation | Wise ordering for writes—combining spatial and temporal locality in write caches for multi-rank storage |
US20080107396A1 (en) * | 2006-11-08 | 2008-05-08 | Tsung-Ning Chung | Systems and methods for playing back data from a circular buffer by utilizing embedded timestamp information |
TWI433163B (zh) * | 2009-12-23 | 2014-04-01 | Mstar Semiconductor Inc | 記憶體控制器及其控制方法 |
CN101800867B (zh) * | 2010-01-19 | 2011-09-28 | 深圳市同洲电子股份有限公司 | 一种实现环形缓冲区的方法、装置及数字电视接收终端 |
CN102591815B (zh) * | 2011-12-27 | 2015-07-29 | Tcl集团股份有限公司 | 一种用环形数据缓冲区读写批量数据的方法及装置 |
US9082204B2 (en) * | 2012-08-30 | 2015-07-14 | Qualcomm Incorporated | Storage structures for stitching primitives in graphics processing |
KR102029806B1 (ko) * | 2012-11-27 | 2019-10-08 | 삼성전자주식회사 | 선입선출 버퍼를 포함하는 시스템 온 칩, 응용 프로세서 및 그것을 포함하는 모바일 장치 |
CN108845877B (zh) * | 2013-05-17 | 2021-09-17 | 华为技术有限公司 | 管理内存的方法、装置和*** |
WO2017013931A1 (ja) * | 2015-07-21 | 2017-01-26 | ソニー株式会社 | 先入れ先出し制御回路、記憶装置、および、先入れ先出し制御回路の制御方法 |
CN107247561A (zh) * | 2017-05-31 | 2017-10-13 | 成都华立达电力信息***有限公司 | 缓冲池循环存储读写方法 |
US10713162B1 (en) * | 2018-04-26 | 2020-07-14 | Lightbits Labs Ltd. | System and method for computer data garbage collection acceleration using peer to peer data transfers |
CN108733344B (zh) * | 2018-05-28 | 2023-07-04 | 深圳市道通智能航空技术股份有限公司 | 数据读写方法、装置以及环形队列 |
CN111694992B (zh) * | 2019-03-15 | 2023-05-26 | 阿里巴巴集团控股有限公司 | 一种数据处理方法和装置 |
CN111865831B (zh) * | 2019-04-30 | 2022-05-13 | 华为技术有限公司 | 数据处理的方法、网络设备、计算节点和*** |
CN110474851A (zh) * | 2019-08-01 | 2019-11-19 | 北京世纪东方通讯设备有限公司 | 一种循环存储结构的存取方法及装置 |
CN111506512B (zh) * | 2020-04-24 | 2021-04-23 | 上海燧原智能科技有限公司 | 调试信息的处理方法、装置、电子设备、存储介质及*** |
CN111930309A (zh) * | 2020-07-31 | 2020-11-13 | 中国人民解放军海军工程大学 | 基于数据分块技术的文件循环存储方法和装置 |
CN111966498B (zh) * | 2020-08-27 | 2023-08-25 | 南京电研电力自动化股份有限公司 | 一种配电房物联网网关数据快速处理方法、***及存储介质 |
CN112306413B (zh) * | 2020-10-30 | 2024-05-07 | 北京百度网讯科技有限公司 | 用于访问内存的方法、装置、设备以及存储介质 |
-
2021
- 2021-08-31 CN CN202111015761.0A patent/CN115934023B/zh active Active
-
2022
- 2022-08-11 EP EP22863077.8A patent/EP4386539A1/en active Pending
- 2022-08-11 WO PCT/CN2022/111739 patent/WO2023029937A1/zh unknown
-
2024
- 2024-02-28 US US18/589,722 patent/US20240201907A1/en active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110704335A (zh) * | 2019-09-03 | 2020-01-17 | 苏州浪潮智能科技有限公司 | 一种基于异步环形缓冲区的数据读取、写入方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2023029937A1 (zh) | 2023-03-09 |
CN115934023A (zh) | 2023-04-07 |
US20240201907A1 (en) | 2024-06-20 |
EP4386539A1 (en) | 2024-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8095727B2 (en) | Multi-reader, multi-writer lock-free ring buffer | |
CN110888727B (zh) | 并发无锁队列实现方法、装置及存储介质 | |
US6668291B1 (en) | Non-blocking concurrent queues with direct node access by threads | |
US10776120B2 (en) | Apparatus and method to generate trace data in response to transactional execution | |
CN104424030B (zh) | 多进程操作共享内存的方法和装置 | |
JP2006164277A (ja) | プロセッサにおけるエラー除去装置および方法,プロセッサ | |
JP2002324058A (ja) | パイプライン処理内の実行を順序付ける命令 | |
CN111290708B (zh) | 一种基于动态调整的环形缓冲区的数据处理方法及设备 | |
US11714801B2 (en) | State-based queue protocol | |
US10303383B1 (en) | System and method for implementing non-blocking, concurrent hash tables | |
CN115934023B (zh) | 数据处理方法、数据处理装置以及相关设备 | |
CN112395093A (zh) | 多线程数据处理方法、装置、电子设备及可读存储介质 | |
CN103412829B (zh) | 扩大mcu程序地址空间的方法及装置 | |
CN111459691A (zh) | 共享内存的读写方法及装置 | |
US20020112100A1 (en) | System and method for data exchange | |
KR20100120133A (ko) | 멀티-프로세서 동기화를 활성화하는 방법 | |
CN115905040B (zh) | 计数器的处理方法、图形处理器、设备及存储介质 | |
CN111522827A (zh) | 一种数据更新方法、装置和电子设备 | |
EP2102748B1 (en) | System and method for recovery of memory transactions | |
CN111666339A (zh) | 一种多线程数据同步方法 | |
CN113782071A (zh) | 处理输入/输出请求的***和方法 | |
CN113626205A (zh) | 处理器、物理寄存器管理方法及电子装置 | |
CN112882831A (zh) | 一种数据处理方法及装置 | |
WO2001013229A2 (en) | System and method for data exchange | |
CN117407148B (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 |