CN110874273A - 一种数据处理方法及装置 - Google Patents
一种数据处理方法及装置 Download PDFInfo
- Publication number
- CN110874273A CN110874273A CN201811012600.4A CN201811012600A CN110874273A CN 110874273 A CN110874273 A CN 110874273A CN 201811012600 A CN201811012600 A CN 201811012600A CN 110874273 A CN110874273 A CN 110874273A
- Authority
- CN
- China
- Prior art keywords
- data block
- cache data
- block
- cache
- buffer area
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请公开了一种数据处理方法及装置。其中数据处理方法包括获取第一缓冲区的信息;根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块;将所述第一缓存数据块的写状态置位,以禁止针对所述第一缓存数据块的读取操作;获得所述第一缓存数据块的版本号;判断所述获得的所述第一缓存数据块的版本号与所述第一缓存数据块的当前的版本号是否相同;若是,则将待写入的数据写入所述第一缓存数据块,将所述第一缓存数据块的写状态清除,以允许针对所述第一缓存数据块的读取操作。采用本申请提供的数据处理方法,解决了单生产者多消费者缓存数据读写的并发问题。
Description
技术领域
本申请涉及数据处理领域,具体涉及一种缓存数据的写入、读取方法及装置。
背景技术
在分布式系统中,多线程协作完成任务,典型的场景是一个线程(生产者线程)生产数据,多个线程(消费者线程)消费数据。通常使用一个缓存来存放这些数据,多线程间的交互就在这个缓存上进行。
在上述场景中,一个生产者线程将一些数据写入内存的缓冲区中,多个消费者线程将一些数据从缓冲区中读出,并各自重复此过程。在对所述缓冲区的读写过程中,需要保证消费者不会从缓冲区中取出不一致的数据。
一种经典的解决方案是使用互斥锁。Cache中有一个读写锁(RwLock)用于同步。生产者写入数据时,先获取写锁;消费者读取数据时,先获取读锁。获取不到锁时,线程会休眠,直到被唤醒。
这种方法,实现比较简单直观。但由于读写锁互斥,造成线程切换开销,影响了并发度,在对性能要求比较高的系统中,容易成为瓶颈。读写锁还有读者优先、写者优先的问题,也会影响读者、写者处理的优先顺序。
发明内容
本申请提供一种数据处理方法及装置,以解决单生产者多消费者缓存数据读写过程中的并发问题。
本申请提供的数据处理方法,包括:
获取第一缓冲区的信息;
根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块;
将所述第一缓存数据块的写状态置位,以禁止针对所述第一缓存数据块的读取操作;
获得所述第一缓存数据块的版本号;
判断所述获得的所述第一缓存数据块的版本号与所述第一缓存数据块的当前的版本号是否相同;
若是,则将待写入的数据写入所述第一缓存数据块,将所述第一缓存数据块的写状态清除,以允许针对所述第一缓存数据块的读取操作。
可选的,若判断获得的所述第一缓存数据块的块版本号与所述第一缓存数据块的当前的版本号不相同,则确定写操作失败。
可选的,所述第一缓存数据块的写状态以及所述第一缓存数据块的版本号设置于所述第一缓存数据块的数据块头中。
可选的,所述第一缓存数据块的数据块头还包括块编号和/或读状态。
可选的,所述缓冲区与缓存数据块之间的映射关系,包括:
编号为x的缓冲区与编号为y的缓存数据块的映射关系为y=x&(n-1),其中,n为缓存数据块的数量。
可选的,还包括:
在所述判断之前,针对所述第一缓存数据块对应的缓存的全局版本号执行递增操作;
更新所述第一缓存数据块的块版本号和块编号。
可选的,还包括:
获取第一缓冲区的信息;
根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块;
读取并保存所述第一缓存数据块的第一属性信息,所述第一属性信息包括所述第一缓存数据块的第一块编号;
读取所述第一缓存数据块的第二属性信息,所述第二属性信息包括所述第一缓存数据块的当前写状态、当前读状态和当前的第二块编号;
若所述第一缓存数据块的当前写状态为清除,所述第一缓存数据块的当前读状态为清除,并且所述第二块编号与所述第一块编号一致,则执行所述预读阶段,否则,确定读取操作失败;
将所述第一缓存数据块中的数据复制到指定的缓冲区中;
读取所述第一缓存数据块的第三属性信息;
若所述第三属性信息与所述第一属性信息一致,则确定读取成功,否则,确定读取失败。
可选的,还包括:
获取需要进行擦除操作的第二缓存数据块;
将所述第二缓存数据块的写状态置位,用来禁止生产者线程进行写操作以及禁止消费者线程进行读操作。
本申请提供一种数据处理装置,其特征在于,包括:
第一获取单元,用于获取第一缓冲区的信息;
第二获取单元,用于根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块;
第一设置单元,用于将所述第一缓存数据块的写状态置位,用以禁止针对所述第一缓存数据块的读取操作;
获得单元,用于获得所述第一缓存数据块的版本号;
判断单元,用于判断所述获得的所述第一缓存数据块的版本号与所述第一缓存数据块的当前的版本号是否相同;
清除单元,用于若是,则将待写入的数据写入所述第一缓存数据块,将所述第一缓存数据块的写状态清除,以允许针对所述第一缓存数据块的读取操作。
可选的,包括确定单元,用于若判断获得的所述第一缓存数据块的块版本号与所述第一缓存数据块的当前的版本号不相同,则确定写操作失败。
可选的,包括第二设置单元,用于将所述第一缓存数据块的写状态以及所述第一缓存数据块的版本号设置于所述第一缓存数据块的数据块头中。
可选的,所述第一缓存数据块的数据块头还包括块编号和/或读状态。
可选的,包括映射单元,用于描述所述缓冲区与缓存数据块之间的映射关系,包括:
编号为x的缓冲区与编号为y的缓存数据块的映射关系为y=x&(n-1),其中,n为缓存数据块的数量。
可选的,还包括:
递增单元,用于在所述判断之前,针对所述第一缓存数据块对应的缓存的全局版本号执行递增操作;
更新单元,更新所述第一缓存数据块的块版本号和块编号。
可选的,还包括:
信息获取单元,用于获取第一缓冲区的信息;
数据块获取单元,用于根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块;
第一读取单元,用于读取并保存所述第一缓存数据块的第一属性信息,所述第一属性信息包括所述第一缓存数据块的第一块编号;
第二读取单元,用于读取所述第一缓存数据块的第二属性信息,所述第二属性信息包括所述第一缓存数据块的当前写状态、当前读状态和当前的第二块编号;
执行单元,用于若所述第一缓存数据块的当前写状态为清除,所述第一缓存数据块的当前读状态为清除,并且所述第二块编号与所述第一块编号一致,则执行所述预读阶段,否则,确定读取操作失败;
复制单元,用于将所述第一缓存数据块中的数据复制到指定的缓冲区中;
第三读取单元,用于读取所述第一缓存数据块的第三属性信息;
确定单元,用于若所述第三属性信息与所述第一属性信息一致,则确定读取成功,否则,确定读取失败。
可选的,还包括:
第二缓存数据块获取单元,用于获取需要进行擦除操作的第二缓存数据块;
置位单元,用于将所述第二缓存数据块的写状态置位,用来禁止生产者线程进行写操作以及禁止消费者线程进行读操作。
本申请提供一种计算机可读取存储介质,其上存储有计算机程序,该程序被处理器执行时,实现以下步骤:
获取第一缓冲区的信息;
根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块;
将所述第一缓存数据块的写状态置位,以禁止针对所述第一缓存数据块的读取操作;
获得所述第一缓存数据块的版本号;
判断所述获得的所述第一缓存数据块的版本号与所述第一缓存数据块的当前的版本号是否相同;
若是,则将待写入的数据写入所述第一缓存数据块,将所述第一缓存数据块的写状态清除,以允许针对所述第一缓存数据块的读取操作。
采用本申请提供的数据处理方法不使用一个全局的读写锁,而是分解为多个阶段,分别原子的执行,有效地降低了线程间同步引起的阻塞、上下文切换,提升了并发度,极大的提升了性能,从而解决了单生产者多消费者缓存数据读写的并发问题。
附图说明
图1是本申请第一实施例提供的一种数据写入方法的流程图;
图2是本申请第一实施例涉及的缓存数据块的数据结构示意图;
图3是本申请第二实施例提供的一种数据读取方法的流程图;
图4是本申请第三实施例提供的一种数据处理装置的流程图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
本申请第一实施例提供一种缓存数据块的写入方法。请参看图1,该图为本申请第一实施例的流程图。以下结合图1对本申请第一实施例提供一种数据写入方法进行详细说明。
所述方法的实现分为写准备阶段和写执行阶段,所述写准备阶段和所述写执行阶段均为原子操作阶段。
所述写准备阶段和所述写执行阶段均为原子操作阶段。在每个阶段使用内存屏障技术,允许写入并发执行,保证数据的完整性。
例如在Java中,原子操作类共有13个类,在java.util.concurrent.atomic包下,可以分为四种类型的原子更新类:原子更新基本类型、原子更新数组类型、原子更新引用和原子更新属性。可以使用这些原子更新类来实现写准备阶段和写执行阶段的原子操作。由于Java中的原子操作为已有技术,这里就不提供详细的实施方法了。
所述写准备阶段包括如下步骤:
S101,获取第一缓冲区的信息;
本步骤用于获取第一缓冲区的信息。
所述第一缓冲区是待进行写入操作的缓冲区。所述第一缓冲区的信息包括该缓冲区的地址块编号等信息。
S102,根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块。
本步骤用于根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块
所述第一缓存数据块的写标志以及所述第一缓存数据块的块版本号设置于所述第一缓存数据块的数据块头中。
所述第一缓存数据块头还包括:块编号和/或读标志。
所述块版本号用来标识缓存数据块的版本号。
所述块编号用来标识缓存数据块的编号,可以使用0,1,2,3等数字来标识。
所述写标志用来标识所述缓存数据块是否正在被写入。
所述读标志用来标识所述缓存数据块是否正在被读取。
请参看图2所示,其为缓存中数据块的数据结构的示意图。图2中,使用generation代表所述块版本号,offset代表块编号,readerstate代表所述读标识,writestate代表所述写标识。generation使用8个bit空间,offset使用8个bit空间,readstate和writestate分别使用1个bit空间。在Intel x86平台,为了充分利用总线访问内存地址对齐特征,在所述数据块头中还使用了6个bit空间的填充块padding。所述数据块头共计使用了24个bit空间。
所有的数据块头占用一片连续的内存。
所述缓冲区的信息与缓存数据块之间的映射关系,包括:
所述缓冲区与缓存数据块之间的映射关系,包括:
编号为x的缓冲区与编号为y的缓存数据块的映射关系为y=x&(n-1),其中,n为缓存数据块的数量。
采用本申请提供的所述缓冲区的信息与缓存数据块之间的映射关系,可以避免缓存分配、释放的开销。
S103,将所述第一缓存数据块的写状态置位,以禁止针对所述第一缓存数据块的读取操作。
本步骤用于将所述第一缓存数据块的写标志设置为是,以禁止消费者线程针对所述第一缓存数据块进行的读取操作。
所述写标志可以用逻辑布尔变量实现,用true标识是,用false标识否。
S104,获得所述第一缓存数据块的块版本号。
本步骤用于获得所述第一缓存数据块的块版本号。
所述写执行阶段包括如下步骤:
S105,判断所述获得的所述第一缓存数据块的版本号与所述第一缓存数据块的当前的版本号是否相同。
在本步骤判断在所述写准备阶段获得的所述第一缓存数据块的块版本号与所述第一缓存数据块的当前的块版本号是否相同,用于避免其他生产者线程对所述第一缓存数据块执行了写操作。
S106,若是,则将待写入的数据写入所述第一缓存数据块,将所述第一缓存数据块的写状态清除,以允许针对所述第一缓存数据块的读取操作。
本步骤用于若所述判断为是,则将待写入的数据写入所述第一缓存数据块,将所述第一缓存数据块的写状态清除,以允许针对所述第一缓存数据块的读取操作。
如果没有其他生产者线程对所述第一缓存数据块执行了写操作,则则将待写入的数据写入所述第一缓存数据块,将所述第一缓存数据块的写标志设置为否,以允许消费者线程针对所述第一缓存数据块进行读取操作,否则,确定写操作失败。
所述写准备阶段,还包括如下步骤:
针对所述第一缓存数据块对应的缓存的全局版本号执行递增操作;
更新所述第一缓存数据块的块版本号和块编号。
所述第一缓存数据块对应的缓存是指用于存放所述第一缓存数据块的缓存空间。所述缓存空间还存放和所述第一缓存数据块具有相同功能的其他缓存数据块。
所述全局版本号用来标识所述缓存的版本。每一次对所述缓存数据块执行写操作时,对所述全局版本号执行递增操作。所述全局版本号的初始值可以设置为0。
本申请第二实施例提供一种数据处理方法中的数据读取方法。请参看图3,该图为本申请第二实施例的流程图。以下结合图3对本申请第二实施例提供一种缓存数据的读取方法进行详细说明。
所述方法的实施包括读准备阶段、预读阶段和读提交阶段,所述读准备阶段、所述预读阶段、所述读提交阶段均为原子操作阶段。
所述读准备阶段、所述预读阶段、所述读提交阶段均为原子操作阶段。在每个阶段使用内存屏障技术,允许写入并发执行,保证数据的完整性。
例如在Java中,原子操作类共有13个类,在java.util.concurrent.atomic包下,可以分为四种类型的原子更新类:原子更新基本类型、原子更新数组类型、原子更新引用和原子更新属性。可以使用这些原子更新类来实现写准备阶段的原子操作。由于Java中的原子操作为已有技术,这里就不提供详细的实施方法了。
所述读准备阶段包括如下步骤
S301,获取第一缓冲区的信息。
本步骤用于获取第一缓冲区的信息。
所述第一缓冲区为待读取内容的缓冲区。所述第一缓冲区的信息包括所述第一缓冲区的编号等信息。
S302,根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块。
本步骤用于根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块。
S303,读取并保存所述第一缓存数据块的第一属性信息,所述第一属性信息包括所述第一缓存数据块的第一块编号。
本步骤用于读取并保存所述第一缓存数据块的第一属性信息。本步骤将第一属性信息拷贝了一份,再后面会使用到。
S304,读取所述第一缓存数据块的第二属性信息,所述第二属性信息包括所述第一缓存数据块的当前写标志、当前读标志和当前的第二块编号;
本步骤用于读取所述第一缓存数据块的当前写标志、当前读标志和当前的第二块编号。
S305,若所述第一缓存数据块的当前写状态为清除,所述第一缓存数据块的当前读状态为清除,并且所述第二块编号与所述第一块编号一致,则执行所述预读阶段,否则,确定读取操作失败。
本步骤用于判断若所述第一缓存数据块的当前写标志为否,所述第一缓存数据块的当前读标志为否,并且所述第二块编号与所述第一块编号一致,则执行所述预读阶段,否则,确定读取操作失败。
所述预读阶段包括如下步骤:
S306,将所述第一缓存数据块中的数据复制到指定的缓冲区中。
本步骤用于将所述第一缓存数据块中的数据复制到所述消费者的缓冲区中。
所述读提交阶段包括如下步骤:
S307,读取所述第一缓存数据块的第三属性信息;
本步骤用于读取所述第一缓存数据块的第三属性信息,包括读标志、写标志、块编号以及块版本号等信息。
S308,若所述第三属性信息与所述第一属性信息一致,则确定读取成功,否则,确定读取失败。
本步骤用于判断所述第三属性信息与所述第一属性信息是否一致,若一致则确定读取成功,否则,确定读取失败。
所述缓存数据的读取方法,还包括
首先,获取需要进行擦除操作的第二缓存数据块;
本步骤用于消费者线程获取需要进行擦除操作的第二缓存数据块。多个消费者也可以并发地擦除所述第一缓存数据块缓存中的数据。
其次,将所述第二缓存数据块的写标志设置为是,用来禁止生产者线程进行写操作以及禁止消费者线程进行读操作。
本步骤用于将所述第二缓存数据块的写标志设置为是,从而禁止生产者线程进行写操作以及禁止其他消费者线程进行读操作。
在上述的实施例中,提供了一种数据处理方法,与之相对应的,本申请还提供一种数据处理装置。请参看图4,其为本申请的一种数据处理装置实施例的流程图。由于本实施例,即第二实施例,基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种数据处理装置,包括:
第一获取单元401,用于获取第一缓冲区的信息;
第二获取单元402,用于根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块;
第一设置单元403,用于将所述第一缓存数据块的写状态置位,以禁止针对所述第一缓存数据块的读取操作;
获得单元404,用于获得所述第一缓存数据块的版本号;
判断单元405,用于判断所述获得的所述第一缓存数据块的版本号与所述第一缓存数据块的当前的版本号是否相同;
清除单元406,用于若是,则将待写入的数据写入所述第一缓存数据块,将所述第一缓存数据块的写状态清除,以允许针对所述第一缓存数据块的读取操作。
本实施例提供的数据处理装置,包括确定单元,用于若判断获得的所述第一缓存数据块的块版本号与所述第一缓存数据块的当前的版本号不相同,则确定写操作失败。
本实施例提供的数据处理装置,包括第二设置单元,用于将所述第一缓存数据块的写状态以及所述第一缓存数据块的版本号设置于所述第一缓存数据块的数据块头中。
本实施例中,所述第一缓存数据块的数据块头还包括块编号和/或读状态。
本实施例提供的数据处理装置,,包括映射单元,用于描述所述缓冲区与缓存数据块之间的映射关系,包括:
编号为x的缓冲区与编号为y的缓存数据块的映射关系为y=x&(n-1),其中,n为缓存数据块的数量。
本实施例提供的数据处理装置,,还包括:
递增单元,用于在所述判断之前,针对所述第一缓存数据块对应的缓存的全局版本号执行递增操作;
更新单元,更新所述第一缓存数据块的块版本号和块编号。
本实施例提供的数据处理装置,还包括:
信息获取单元,用于获取第一缓冲区的信息;
数据块获取单元,用于根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块;
第一读取单元,用于读取并保存所述第一缓存数据块的第一属性信息,所述第一属性信息包括所述第一缓存数据块的第一块编号;
第二读取单元,用于读取所述第一缓存数据块的第二属性信息,所述第二属性信息包括所述第一缓存数据块的当前写状态、当前读状态和当前的第二块编号;
执行单元,用于若所述第一缓存数据块的当前写状态为清除,所述第一缓存数据块的当前读状态为清除,并且所述第二块编号与所述第一块编号一致,则执行所述预读阶段,否则,确定读取操作失败;
复制单元,用于将所述第一缓存数据块中的数据复制到指定的缓冲区中;
第三读取单元,用于读取所述第一缓存数据块的第三属性信息;
确定单元,用于若所述第三属性信息与所述第一属性信息一致,则确定读取成功,否则,确定读取失败。
本实施例提供的数据处理装置,还包括:
第二缓存数据块获取单元,用于获取需要进行擦除操作的第二缓存数据块;
置位单元,用于将所述第二缓存数据块的写状态置位,用来禁止生产者线程进行写操作以及禁止消费者线程进行读操作。
本申请第三实施例提供一种计算机可读取存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时,实现以下步骤:
缓存数据的写入包括写准备阶段和写执行阶段,所述写准备阶段和所述写执行阶段均为原子操作阶段;
所述写准备阶段包括如下步骤:
获取第一缓冲区的信息;
根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块;
将所述第一缓存数据块的写标志设置为是,用以针对所述第一缓存数据块的读取操作;
获得所述第一缓存数据块的块版本号;
所述写执行阶段包括如下步骤:
判断在所述写准备阶段获得的所述第一缓存数据块的块版本号与所述第一缓存数据块的当前的块版本号是否相同;
若是,则将待写入的数据写入所述第一缓存数据块,将所述第一缓存数据块的写标志设置为否,用以允许针对所述第一缓存数据块的读取操作,否则,确定写操作失败。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个操作器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
Claims (19)
1.一种数据处理方法,其特征在于,包括:
获取第一缓冲区的信息;
根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块;
将所述第一缓存数据块的写状态置位,以禁止针对所述第一缓存数据块的读取操作;
获得所述第一缓存数据块的版本号;
判断所述获得的所述第一缓存数据块的版本号与所述第一缓存数据块的当前的版本号是否相同;
若是,则将待写入的数据写入所述第一缓存数据块,将所述第一缓存数据块的写状态清除,以允许针对所述第一缓存数据块的读取操作。
2.根据权利要求1所述的数据处理方法,其特征在于,若判断获得的所述第一缓存数据块的块版本号与所述第一缓存数据块的当前的版本号不相同,则确定写操作失败。
3.根据权利要求1所述的数据处理方法,其特征在于,所述第一缓存数据块的写状态以及所述第一缓存数据块的版本号设置于所述第一缓存数据块的数据块头中。
4.根据权利要求3所述的数据处理方法,其特征在于,所述第一缓存数据块的数据块头还包括块编号和/或读状态。
5.根据权利要求1所述的数据处理方法,其特征在于,所述缓冲区与缓存数据块之间的映射关系,包括:
编号为x的缓冲区与编号为y的缓存数据块的映射关系为y=x&(n-1),其中,n为缓存数据块的数量。
6.根据权利要求1所述的数据处理方法,其特征在于,还包括:
在所述判断之前,针对所述第一缓存数据块对应的缓存的全局版本号执行递增操作;
更新所述第一缓存数据块的块版本号和块编号。
7.根据权利要求1所述的数据处理方法,其特征在于,还包括:
读取并保存所述第一缓存数据块的第一属性信息,所述第一属性信息包括所述第一缓存数据块的第一块编号;
读取所述第一缓存数据块的第二属性信息,所述第二属性信息包括所述第一缓存数据块的当前写状态、当前读状态和当前的第二块编号;
若所述第一缓存数据块的当前写状态为清除,所述第一缓存数据块的当前读状态为清除,并且所述第二块编号与所述第一块编号一致,则执行预读阶段,否则,确定读取操作失败。
8.根据权利要求7所述的数据处理方法,其特征在于,还包括:
将所述第一缓存数据块中的数据复制到指定的缓冲区中;
读取所述第一缓存数据块的第三属性信息;
若所述第三属性信息与所述第一属性信息一致,则确定读取成功,否则,确定读取失败。
9.根据权利要求7所述的数据处理方法,其特征在于,还包括:
获取需要进行擦除操作的第二缓存数据块;
将所述第二缓存数据块的写状态置位,用来禁止生产者线程进行写操作以及禁止消费者线程进行读操作。
10.一种数据处理装置,其特征在于,包括:
第一获取单元,用于获取第一缓冲区的信息;
第二获取单元,用于根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块;
第一设置单元,用于将所述第一缓存数据块的写状态置位,以禁止针对所述第一缓存数据块的读取操作;
获得单元,用于获得所述第一缓存数据块的版本号;
判断单元,用于判断所述获得的所述第一缓存数据块的版本号与所述第一缓存数据块的当前的版本号是否相同;
清除单元,用于若是,则将待写入的数据写入所述第一缓存数据块,将所述第一缓存数据块的写状态清除,以允许针对所述第一缓存数据块的读取操作。
11.根据权利要求10所述的数据处理装置,其特征在于,包括确定单元,用于若判断获得的所述第一缓存数据块的块版本号与所述第一缓存数据块的当前的版本号不相同,则确定写操作失败。
12.根据权利要求10所述的数据处理装置,其特征在于,包括第二设置单元,用于将所述第一缓存数据块的写状态以及所述第一缓存数据块的版本号设置于所述第一缓存数据块的数据块头中。
13.根据权利要求12所述的数据处理装置,其特征在于,所述第一缓存数据块的数据块头还包括块编号和/或读状态。
14.根据权利要求10所述的数据处理装置,其特征在于,包括映射单元,用于描述所述缓冲区与缓存数据块之间的映射关系,包括:
编号为x的缓冲区与编号为y的缓存数据块的映射关系为y=x&(n-1),其中,n为缓存数据块的数量。
15.根据权利要求10所述的数据处理装置,其特征在于,还包括:
递增单元,用于在所述判断之前,针对所述第一缓存数据块对应的缓存的全局版本号执行递增操作;
更新单元,更新所述第一缓存数据块的块版本号和块编号。
16.根据权利要求10所述的数据处理装置,其特征在于,还包括:
信息获取单元,用于获取第一缓冲区的信息;
数据块获取单元,用于根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块;
第一读取单元,用于读取并保存所述第一缓存数据块的第一属性信息,所述第一属性信息包括所述第一缓存数据块的第一块编号;
第二读取单元,用于读取所述第一缓存数据块的第二属性信息,所述第二属性信息包括所述第一缓存数据块的当前写状态、当前读状态和当前的第二块编号;
执行单元,用于若所述第一缓存数据块的当前写状态为清除,所述第一缓存数据块的当前读状态为清除,并且所述第二块编号与所述第一块编号一致,则执行所述预读阶段,否则,确定读取操作失败;
17.根据权利要求16所述的数据处理装置,其特征在于,还包括:
复制单元,用于将所述第一缓存数据块中的数据复制到指定的缓冲区中;
第三读取单元,用于读取所述第一缓存数据块的第三属性信息;
确定单元,用于若所述第三属性信息与所述第一属性信息一致,则确定读取成功,否则,确定读取失败。
18.根据权利要求16所述的数据处理装置,其特征在于,还包括:
第二缓存数据块获取单元,用于获取需要进行擦除操作的第二缓存数据块;
置位单元,用于将所述第二缓存数据块的写状态置位,用来禁止生产者线程进行写操作以及禁止消费者线程进行读操作。
19.一种计算机可读取存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时,实现以下步骤:
获取第一缓冲区的信息;
根据所述第一缓冲区的信息以及缓冲区与缓存数据块之间的映射关系,获取所述第一缓冲区对应的第一缓存数据块;
将所述第一缓存数据块的写状态置位,以禁止针对所述第一缓存数据块的读取操作;
获得所述第一缓存数据块的版本号;
判断所述获得的所述第一缓存数据块的版本号与所述第一缓存数据块的当前的版本号是否相同;
若是,则将待写入的数据写入所述第一缓存数据块,将所述第一缓存数据块的写状态清除,以允许针对所述第一缓存数据块的读取操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811012600.4A CN110874273B (zh) | 2018-08-31 | 2018-08-31 | 一种数据处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811012600.4A CN110874273B (zh) | 2018-08-31 | 2018-08-31 | 一种数据处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110874273A true CN110874273A (zh) | 2020-03-10 |
CN110874273B CN110874273B (zh) | 2023-06-13 |
Family
ID=69715820
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811012600.4A Active CN110874273B (zh) | 2018-08-31 | 2018-08-31 | 一种数据处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110874273B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111597239A (zh) * | 2020-04-10 | 2020-08-28 | 中科驭数(北京)科技有限公司 | 数据对齐的方法及装置 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070174411A1 (en) * | 2006-01-26 | 2007-07-26 | Brokenshire Daniel A | Apparatus and method for efficient communication of producer/consumer buffer status |
US20090043927A1 (en) * | 2005-08-15 | 2009-02-12 | Sony Computer Entertainment Inc. | Buffer managing method and buffer managing apparatus |
CN101763289A (zh) * | 2009-09-25 | 2010-06-30 | 中国人民解放军国防科学技术大学 | 一种基于共享内存的消息传递方法 |
CN102541757A (zh) * | 2011-11-30 | 2012-07-04 | 华为技术有限公司 | 写缓存方法、缓存同步方法和装置 |
CN103645942A (zh) * | 2013-12-12 | 2014-03-19 | 北京奇虎科技有限公司 | 基于消息队列的共享内存写入及读取方法和系统 |
US20150269065A1 (en) * | 2014-03-19 | 2015-09-24 | Qualcomm Incorporated | Hardware-based atomic operations for supporting inter-task communication |
CN105511802A (zh) * | 2015-11-24 | 2016-04-20 | 北京达沃时代科技有限公司 | 写缓存的方法和装置以及磁盘缓存区的同步方法和装置 |
CN105740164A (zh) * | 2014-12-10 | 2016-07-06 | 阿里巴巴集团控股有限公司 | 支持缓存一致性的多核处理器、读写方法、装置及设备 |
CN105912479A (zh) * | 2016-04-07 | 2016-08-31 | 武汉数字派特科技有限公司 | 一种并发数据的缓存方法及结构 |
CN107305477A (zh) * | 2016-04-25 | 2017-10-31 | 中国科学院微电子研究所 | 一种flashcache混合存储系统的缓存读写操作方法及系统 |
CN107807858A (zh) * | 2017-10-30 | 2018-03-16 | 北京神州绿盟信息安全科技股份有限公司 | 一种读写锁操作方法及系统、设备 |
-
2018
- 2018-08-31 CN CN201811012600.4A patent/CN110874273B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090043927A1 (en) * | 2005-08-15 | 2009-02-12 | Sony Computer Entertainment Inc. | Buffer managing method and buffer managing apparatus |
US20070174411A1 (en) * | 2006-01-26 | 2007-07-26 | Brokenshire Daniel A | Apparatus and method for efficient communication of producer/consumer buffer status |
CN101763289A (zh) * | 2009-09-25 | 2010-06-30 | 中国人民解放军国防科学技术大学 | 一种基于共享内存的消息传递方法 |
CN102541757A (zh) * | 2011-11-30 | 2012-07-04 | 华为技术有限公司 | 写缓存方法、缓存同步方法和装置 |
CN103645942A (zh) * | 2013-12-12 | 2014-03-19 | 北京奇虎科技有限公司 | 基于消息队列的共享内存写入及读取方法和系统 |
US20150269065A1 (en) * | 2014-03-19 | 2015-09-24 | Qualcomm Incorporated | Hardware-based atomic operations for supporting inter-task communication |
CN105740164A (zh) * | 2014-12-10 | 2016-07-06 | 阿里巴巴集团控股有限公司 | 支持缓存一致性的多核处理器、读写方法、装置及设备 |
CN105511802A (zh) * | 2015-11-24 | 2016-04-20 | 北京达沃时代科技有限公司 | 写缓存的方法和装置以及磁盘缓存区的同步方法和装置 |
CN105912479A (zh) * | 2016-04-07 | 2016-08-31 | 武汉数字派特科技有限公司 | 一种并发数据的缓存方法及结构 |
CN107305477A (zh) * | 2016-04-25 | 2017-10-31 | 中国科学院微电子研究所 | 一种flashcache混合存储系统的缓存读写操作方法及系统 |
CN107807858A (zh) * | 2017-10-30 | 2018-03-16 | 北京神州绿盟信息安全科技股份有限公司 | 一种读写锁操作方法及系统、设备 |
Non-Patent Citations (1)
Title |
---|
余翔湛,殷丽华: "动态共享内存缓冲池技术" * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111597239A (zh) * | 2020-04-10 | 2020-08-28 | 中科驭数(北京)科技有限公司 | 数据对齐的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110874273B (zh) | 2023-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10089191B2 (en) | Selectively persisting application program data from system memory to non-volatile data storage | |
US10936207B2 (en) | Linked lists in flash memory | |
US11182083B2 (en) | Bloom filters in a flash memory | |
US11347417B2 (en) | Locking structures in flash memory | |
US11106362B2 (en) | Additive library for data structures in a flash memory | |
CN104424030B (zh) | 多进程操作共享内存的方法和装置 | |
CN107622020B (zh) | 一种数据存储方法、访问方法及装置 | |
US10318201B2 (en) | Flash interface for processing datasets | |
JP5932171B2 (ja) | ストレージシステムにおけるオブジェクトベースのトランザクションのための方法およびシステム | |
US20150067279A1 (en) | Data processing system and method for operating a data processing system | |
CN107391544B (zh) | 列式存储数据的处理方法、装置、设备及计算机储存介质 | |
CN110781016B (zh) | 一种数据处理方法、装置、设备及介质 | |
CN106201331A (zh) | 用于写入数据的方法及设备与储存媒体 | |
WO2022126470A1 (zh) | Flash数据掉电保护方法及设备 | |
CN112181902A (zh) | 数据库的存储方法、装置及电子设备 | |
US20180121371A1 (en) | Reading by user-level processes | |
US20160342508A1 (en) | Identifying memory regions that contain remapped memory locations | |
CN110874273A (zh) | 一种数据处理方法及装置 | |
CN110147670B (zh) | 一种工作于内核态的进程间持久性内存保护方法 | |
US20070260614A1 (en) | Lock-free implementation of an ordered single-writer multiple-readers data structure | |
WO2017044124A1 (en) | Switch process virtual address space | |
KR101881038B1 (ko) | 비휘발성 메모리에 저장된 메모리 매핑 파일의 원자적 업데이트 방법 및 제어 장치 | |
CN116204124B (zh) | 一种基于冲突锁的数据处理方法、系统及电子设备 | |
WO2015004570A1 (en) | Method and system for implementing a dynamic array data structure in a cache line | |
CN116009778A (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 |