CN113238857B - 一种基于内存池的map映射表多线程遍历方法及装置 - Google Patents
一种基于内存池的map映射表多线程遍历方法及装置 Download PDFInfo
- Publication number
- CN113238857B CN113238857B CN202110429607.1A CN202110429607A CN113238857B CN 113238857 B CN113238857 B CN 113238857B CN 202110429607 A CN202110429607 A CN 202110429607A CN 113238857 B CN113238857 B CN 113238857B
- Authority
- CN
- China
- Prior art keywords
- target
- instance
- linked list
- unit
- idle
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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/064—Management of blocks
-
- 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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- 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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
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 Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于内存池的map映射表多线程遍历方法及装置,方法包括:周期性建立遍历线程,所述遍历线程用于遍历存量链表,所述存量链表中包括目标单元;识别所述目标单元的状态信息,所述状态信息包括空闲状态和非空闲状态;根据所述目标单元的状态信息连续访问内存块的目标链表项;根据所述目标链表项识别所述目标单元的指示标志;根据所述指示标志获取目标实例;将所述目标实例写入磁盘快照文件。本发明能够提高快照生成速度,可广泛应用于通信技术领域。
Description
技术领域
本发明涉及通信技术领域,尤其是一种基于内存池的map映射表多线程遍历方法及装置。
背景技术
在通讯系统中,涉及很多映射表这类功能需求,如DNS映射表、路由表关系映射表等。映射表是用来存放键-值对,可以通过键快速查找到对应的值,常规的做法是用map数据结构实现键-值关系映射。系统要求在保证系统对外正常服务的同时,需要周期性对该映射表的数据生成快照。快照(Snapshot)是指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点的映像。快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。快照的作用主要是能够进行在线数据备份与恢复。
通讯系统的流量规模通常比较大,业务繁忙,对映射表的更新查询等业务操作非常频繁,所以必需在保证业务功能尽量不受影响的情况,实现高效的快照功能。
现有方法包括:一种是串行处理,在暂停对外服务之后,进行快照生成,然后再恢复对外服务;另一种是对映射表加互斥锁(或对元素加细粒度锁),需等待得到资源锁后,对映射表元素进行访问,生成快照,然后释放资源锁;还有一种典型做法是通过fork函数clone进程的方式创建父进程副本,副本包括父进程数据空间、堆、栈等资源,然后在副本进程做快照。
上述现有的实现方法,串行方式和引入锁方式,会造成对外服务的卡顿,会造成资源互斥等待,从而导致系统吞吐能力下降,甚至出现服务不可用等瘫痪状态,未能充分发挥多核并行运算特性;clone进程的方式,当映射表的数据量比较大时,克隆进程副本时会占用大量的系统资源和处理时间,同样造成服务卡顿、服务超时等较大影响。
发明内容
有鉴于此,本发明实施例提供一种速度快的基于内存池的map映射表多线程遍历方法及装置。
本发明的第一方面提供了一种基于内存池的map映射表多线程遍历方法,包括:
周期性建立遍历线程,所述遍历线程用于遍历存量链表,所述存量链表中包括目标单元;
识别所述目标单元的状态信息,所述状态信息包括空闲状态和非空闲状态;
根据所述目标单元的状态信息连续访问内存块的目标链表项;
根据所述目标链表项识别所述目标单元的指示标志;
根据所述指示标志获取目标实例;
将所述目标实例写入磁盘快照文件;
其中,读取数据的线程和写入数据的线程彼此分离。
优选地,所述方法还包括:
通过多个固定大小的内存块构建固定内存池;
其中,所述内存池包括存量链表和空闲链表;所述存量链表用于对新增的内存块进行管理;所述空闲链表用于对空闲的内存块进行管理。
优选地,所述目标单元包括一个布尔型stat字段、一个无符号整型index字段和两个Object实例;
其中,所述stat字段,用于表征所述目标单元的状态信息,所述状态信息包括空闲状态和非空闲状态;
所述index字段,用于表征所述目标单元使用的目标实例;
所述Object实例,用于存储不同数据类型的值。
可选地,所述方法还包括添加元素的步骤,该步骤包括:
向空闲链表申请一个块单元,将所述块单元的stat状态设置为非空闲;
对目标index字段进行奇偶判断,确定所述目标index字段的可写Object实例;
对所述可写Object实例进行赋值操作,将所述可写Object实例转变为可读Object实例;
将所述块单元的指针作为Value值插入到映射表中,构建得到一个键值对。
可选地,所述方法还包括查找和更新元素的步骤,该步骤包括:
对块单元的index值进行奇偶判断,获取所述index指向的Object实例,得到可读实例;
对块单元的index加一后的值进行奇偶判断,获取所述index加一后指向的Object实例,得到可写实例。
可选地,所述方法还包括删除元素的步骤,该步骤包括:
在映射表中按键查找对应的值,得到目标键值对;
将所述目标键值对从所述映射表中删除;
将所述目标键值对对应的单元的stat设置为空闲状态,并将该单元插入到空闲链表中。
可选地,所述方法还包括快照生成步骤,该步骤包括:
新建一条线程,根据所述线程对存量链表进行遍历;
对所述存量链表中的每个块单元进行读取处理;
当所述块单元的stat为空闲状态时,则不对当前块单元进行处理;当所述块单元的stat为非空闲状态时,通过index获取当前块单元的可读实例,并将该可读实例写入到快照文件;
遍历所有存量链表完成当前数据的快照。
本发明实施例的另一方面提供了一种基于内存池的map映射表多线程遍历装置,包括:
线程构建模块,用于周期性建立遍历线程,所述遍历线程用于遍历存量链表,所述存量链表中包括目标单元;
第一识别模块,用于识别所述目标单元的状态信息,所述状态信息包括空闲状态和非空闲状态;
访问模块,用于根据所述目标单元的状态信息连续访问内存块的目标链表项;
第二识别模块,用于根据所述目标链表项识别所述目标单元的指示标志;
获取模块,用于根据所述指示标志获取目标实例;
写入模块,用于将所述目标实例写入磁盘快照文件;
其中,读取数据的线程和写入数据的线程彼此分离。
本发明实施例的另一方面提供了一种电子设备,包括处理器以及存储器;
所述存储器用于存储程序;
所述处理器执行所述程序实现如前面所述的方法。
本发明实施例的另一方面还提供了一种计算机可读存储介质,所述存储介质存储有程序,所述程序被处理器执行实现如前面所述的方法。
本发明实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前面的方法。
本发明的实施例首先周期性建立遍历线程,所述遍历线程用于遍历存量链表,所述存量链表中包括目标单元;识别所述目标单元的状态信息,所述状态信息包括空闲状态和非空闲状态;根据所述目标单元的状态信息连续访问内存块的目标链表项;根据所述目标链表项识别所述目标单元的指示标志;根据所述指示标志获取目标实例;将所述目标实例写入磁盘快照文件。本发明实施例采用基于内存池遍历的快照生成方法。遍历内存池时,利用内存池的内存块连续性特性,增加内存访问命中率,提高快照生成速度;另外,本发明的线程间读写过程彼此分离,无需资源等待。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的整体步骤流程图;
图2为本发明实施例提供的键与单元的示意图;
图3为本发明实施例提供的快照生成过程示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
针对现有技术存在的问题,本发明实施例提供了一种基于内存池的map映射表多线程遍历方法,参考图1,该方法包括:
周期性建立遍历线程,所述遍历线程用于遍历存量链表,所述存量链表中包括目标单元;
识别所述目标单元的状态信息,所述状态信息包括空闲状态和非空闲状态;
根据所述目标单元的状态信息连续访问内存块的目标链表项;
根据所述目标链表项识别所述目标单元的指示标志;
根据所述指示标志获取目标实例;
将所述目标实例写入磁盘快照文件;
其中,读取数据的线程和写入数据的线程彼此分离。
优选地,所述方法还包括:
通过多个固定大小的内存块构建固定内存池;
其中,所述内存池包括存量链表和空闲链表;所述存量链表用于对新增的内存块进行管理;所述空闲链表用于对空闲的内存块进行管理。
优选地,所述目标单元包括一个布尔型stat字段、一个无符号整型index字段和两个Object实例;
其中,所述stat字段,用于表征所述目标单元的状态信息,所述状态信息包括空闲状态和非空闲状态;
所述index字段,用于表征所述目标单元使用的目标实例;
所述Object实例,用于存储不同数据类型的值。
可选地,所述方法还包括添加元素的步骤,该步骤包括:
向空闲链表申请一个块单元,将所述块单元的stat状态设置为非空闲;
对目标index字段进行奇偶判断,确定所述目标index字段的可写Object实例;
对所述可写Object实例进行赋值操作,将所述可写Object实例转变为可读Object实例;
将所述块单元的指针作为Value值插入到映射表中,构建得到一个键值对。
可选地,所述方法还包括查找和更新元素的步骤,该步骤包括:
对块单元的index值进行奇偶判断,获取所述index指向的Object实例,得到可读实例;
对块单元的index加一后的值进行奇偶判断,获取所述index加一后指向的Object实例,得到可写实例。
可选地,所述方法还包括删除元素的步骤,该步骤包括:
在映射表中按键查找对应的值,得到目标键值对;
将所述目标键值对从所述映射表中删除;
将所述目标键值对对应的单元的stat设置为空闲状态,并将该单元插入到空闲链表中。
可选地,所述方法还包括快照生成步骤,该步骤包括:
新建一条线程,根据所述线程对存量链表进行遍历;
对所述存量链表中的每个块单元进行读取处理;
当所述块单元的stat为空闲状态时,则不对当前块单元进行处理;当所述块单元的stat为非空闲状态时,通过index获取当前块单元的可读实例,并将该可读实例写入到快照文件;
遍历所有存量链表完成当前数据的快照。
本发明实施例的另一方面提供了一种基于内存池的map映射表多线程遍历装置,包括:
线程构建模块,用于周期性建立遍历线程,所述遍历线程用于遍历存量链表,所述存量链表中包括目标单元;
第一识别模块,用于识别所述目标单元的状态信息,所述状态信息包括空闲状态和非空闲状态;
访问模块,用于根据所述目标单元的状态信息连续访问内存块的目标链表项;
第二识别模块,用于根据所述目标链表项识别所述目标单元的指示标志;
获取模块,用于根据所述指示标志获取目标实例;
写入模块,用于将所述目标实例写入磁盘快照文件;
其中,读取数据的线程和写入数据的线程彼此分离。
本发明实施例的另一方面提供了一种电子设备,包括处理器以及存储器;
所述存储器用于存储程序;
所述处理器执行所述程序实现如前面所述的方法。
本发明实施例的另一方面还提供了一种计算机可读存储介质,所述存储介质存储有程序,所述程序被处理器执行实现如前面所述的方法。
本发明实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前面的方法。
下面结合说明书附图,对本发明的具体实现过程进行详细描述:
现有的实现方法,串行方式和引入锁方式,会造成对外服务的卡顿,会造成资源互斥等待,从而导致系统吞吐能力下降,甚至出现服务不可用等瘫痪状态,未能充分发挥多核并行运算特性;clone进程的方式,当映射表的数据量比较大时,克隆进程副本时会占用大量的系统资源和处理时间,同样造成服务卡顿、服务超时等较大影响。因此,本发明提出一种内存池与map相结合的数据结构算法,以及提出一种可以保持系统处理能力的情况下,生成数据快照的实现方法。
本发明实施例中的映射表的存放键-值关系,即一对key-value表示一个映射关系,具备添加、查找、更新、删除映射关系的功能。本方案由内存池和映射表两部分组成,下面从映射表的添加元素、查找更新元素、删除元素、生成快照步骤等展开描述:
1、映射表用来存放键-值对,即Key-Value关系对,映射表存放多个Key-Value对,根据Key-Value对的多少动态变动表大小。
映射表如表1所示:
表1
2、内存池采用固定内存池,是由一系列固定大小的内存块组成,把该内存块称为单元。建立”存量链表”、”空闲链表”这俩单向链表进行块资源管理。”存量链表”是指在扩容时把新增的内存块追加到该链表管理,该链表包含所有存量的单元。内存池每次扩容按批量申请的方式,预先申请一批连续的内存块单元。”空闲链表”是负责空闲块资源管理的链表,在做业务时从该链表申请块资源,或业务完成后需回收块资源时向该链表插入块资源。内存池如表2所示:
表2
单元 |
单元 |
单元 |
3、单元的指针作为映射表的Value值。单元结构由一个布尔型stat字段、一个无符号整型index字段和两个Object实例(Object0、Object1)组成。stat字段表示该单元的状态,0表示空闲状态,否则表示非空闲状态,即申请该资源单元时设置为非0表示非空闲状态,回收该资源单元时设置为0表示空闲状态。Index字段指示当前使用的是其中的Object0还是Object1实例。当index偶数时表示当前使用Object0实例,否则表示Object1实例。Index字段指示的Object实例为可读实例,另外一个为可写实例,更新操作使两个实例交替变换角色使用。Object实例用于存储具体类型的值,Object支持基本数据类型,亦支持复合数据类型。单元的结构如表3所示:
表3
stat |
index |
Object0 |
Object1 |
4、添加元素的操作过程:
当键在映射表中查找不到的情况下,可以按下面描述的方法添加键值对。向”空闲链表”申请一个块单元,把块单元的stat状态设置非空闲。对”Index+1”判断奇偶,获取”index+1”指向的Object实例,即为可写实例。然后对可写实例进行赋值等操作,然后Index自增,把该实例转变为可读实例。把块单元的指针作为Value值,按键-值对插入到映射表中。一个键值对,键与单元的示意结构如图2所示。
5、查找和更新元素
在映射表中,按键查找得到对应的值,即单元的指针。查找的过程是,对单元的Index判断奇偶,获取index指向的Object实例,即可读实例,至此完成实例的查找。
更新的过程分两步,先对”Index+1”判断奇偶,获取”index+1”指向的Object实例,即可写实例,更新该实例值。Index自增,把该Object实例转变为可读实例,至此完成更新。
6、删除元素
在映射表中,按键查找得到对应的值,即单元的指针。把该键值对在映射表中删除。把该单元的stat设置为0空闲状态,插入到”空闲链表”中,完成单元块的回收。
7、快照生成过程
新建一条线程,对”存量链表”进行遍历,对每一个块单元进行读取处理,当块单元的stat为0空闲状态则跳过,否则通过index获得可读实例,把该实例的值进行写入到快照文件。遍历完”存量链表”即完成当前数据的快照。本发明实施例的快照生成过程的示意图如图3所示。
综上所述,本发明的多线程无锁遍历映射表的实现方法解决了多线程对映射表进行遍历时,共享资源的互斥锁造成的线程等待问题,等待造成的服务卡顿问题。另外,本发明实施例的映射表采用基于内存池遍历的快照生成方法,遍历内存池时,利用内存池的内存块连续性特性,增加内存访问命中率,能够提高快照生成速度。
本发明提出的快照方法,避免了现有快照方法采用的资源抢占、全量clone等对系统性能影响较大的操作。利用内存池作为对象进行数据遍历,读和写实例的分离,实现资源的无锁访问,从而减少对业务功能的影响,保证业务服务的正常使用,保证业务线程的处理性能,提高快照线程与业务线程的并发度。
在一些可选择的实施例中,在方框图中提到的功能/操作可以不按照操作示图提到的顺序发生。例如,取决于所涉及的功能/操作,连续示出的两个方框实际上可以被大体上同时地执行或所述方框有时能以相反顺序被执行。此外,在本发明的流程图中所呈现和描述的实施例以示例的方式被提供,目的在于提供对技术更全面的理解。所公开的方法不限于本文所呈现的操作和逻辑流程。可选择的实施例是可预期的,其中各种操作的顺序被改变以及其中被描述为较大操作的一部分的子操作被独立地执行。
此外,虽然在功能性模块的背景下描述了本发明,但应当理解的是,除非另有相反说明,所述的功能和/或特征中的一个或多个可以被集成在单个物理装置和/或软件模块中,或者一个或多个功能和/或特征可以在单独的物理装置或软件模块中被实现。还可以理解的是,有关每个模块的实际实现的详细讨论对于理解本发明是不必要的。更确切地说,考虑到在本文中公开的装置中各种功能模块的属性、功能和内部关系的情况下,在工程师的常规技术内将会了解该模块的实际实现。因此,本领域技术人员运用普通技术就能够在无需过度试验的情况下实现在权利要求书中所阐明的本发明。还可以理解的是,所公开的特定概念仅仅是说明性的,并不意在限制本发明的范围,本发明的范围由所附权利要求书及其等同方案的全部范围来决定。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。
计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
以上是对本发明的较佳实施进行了具体说明,但本发明并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。
Claims (3)
1.一种基于内存池的map映射表多线程遍历方法,其特征在于,包括:
周期性建立遍历线程,所述遍历线程用于遍历存量链表,所述存量链表中包括目标单元;
识别所述目标单元的状态信息,所述状态信息包括空闲状态和非空闲状态;
根据所述目标单元的状态信息连续访问内存块的目标链表项;
根据所述目标链表项识别所述目标单元的指示标志;
根据所述指示标志获取目标实例;
将所述目标实例写入磁盘快照文件;
其中,读取数据的线程和写入数据的线程彼此分离;
所述方法还包括:
通过多个固定大小的内存块构建固定内存池;
其中,所述内存池包括存量链表和空闲链表;所述存量链表用于对新增的内存块进行管理;所述空闲链表用于对空闲的内存块进行管理;
所述目标单元包括一个布尔型stat字段、一个无符号整型index字段和两个Object实例;
其中,所述stat字段,用于表征所述目标单元的状态信息,所述状态信息包括空闲状态和非空闲状态;
所述index字段,用于表征所述目标单元使用的目标实例;
所述Object实例,用于存储不同数据类型的值;
所述方法还包括添加元素的步骤,该步骤包括:
向空闲链表申请一个块单元,将所述块单元的stat状态设置为非空闲;
对目标index字段进行奇偶判断,确定所述目标index字段的可写Object实例;
对所述可写Object实例进行赋值操作,将所述可写Object实例转变为可读Object实例;
将所述块单元的指针作为Value值插入到映射表中,构建得到一个键值对;
所述方法还包括查找和更新元素的步骤,该步骤包括:
对块单元的index值进行奇偶判断,获取所述index值指向的Object实例,得到可读实例;
对块单元的index加一后的值进行奇偶判断,获取所述index加一后指向的Object实例,得到可写实例;
所述方法还包括删除元素的步骤,该步骤包括:
在映射表中按键查找对应的值,得到目标键值对;
将所述目标键值对从所述映射表中删除;
将所述目标键值对对应的单元的stat设置为空闲状态,并将所述目标键值对对应的单元插入到空闲链表中;
所述方法还包括快照生成步骤,该步骤包括:
新建一条线程,根据新建的线程对存量链表进行遍历;
对所述存量链表中的每个块单元进行读取处理;
当所述块单元的stat为空闲状态时,则不对当前块单元进行处理;当所述块单元的stat为非空闲状态时,通过index获取当前块单元的可读实例,并将该可读实例写入到快照文件;
遍历所有存量链表完成当前数据的快照。
2.一种电子设备,其特征在于,包括处理器以及存储器;
所述存储器用于存储程序;
所述处理器执行所述程序实现如权利要求1所述的方法。
3.一种计算机可读存储介质,其特征在于,所述存储介质存储有程序,所述程序被处理器执行实现如权利要求1所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110429607.1A CN113238857B (zh) | 2021-04-21 | 2021-04-21 | 一种基于内存池的map映射表多线程遍历方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110429607.1A CN113238857B (zh) | 2021-04-21 | 2021-04-21 | 一种基于内存池的map映射表多线程遍历方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113238857A CN113238857A (zh) | 2021-08-10 |
CN113238857B true CN113238857B (zh) | 2022-10-14 |
Family
ID=77128740
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110429607.1A Active CN113238857B (zh) | 2021-04-21 | 2021-04-21 | 一种基于内存池的map映射表多线程遍历方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113238857B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101582092A (zh) * | 2009-06-12 | 2009-11-18 | 中兴通讯股份有限公司 | 一种实现保存内存中的数据的方法及装置 |
CN109614055A (zh) * | 2018-12-21 | 2019-04-12 | 杭州宏杉科技股份有限公司 | 快照创建方法、装置、电子设备及机器可读存储介质 |
CN112543237A (zh) * | 2020-11-27 | 2021-03-23 | 互联网域名系统北京市工程研究中心有限公司 | 无锁dns缓存方法和dns服务器 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9672044B2 (en) * | 2012-08-01 | 2017-06-06 | Nxp Usa, Inc. | Space efficient checkpoint facility and technique for processor with integrally indexed register mapping and free-list arrays |
-
2021
- 2021-04-21 CN CN202110429607.1A patent/CN113238857B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101582092A (zh) * | 2009-06-12 | 2009-11-18 | 中兴通讯股份有限公司 | 一种实现保存内存中的数据的方法及装置 |
CN109614055A (zh) * | 2018-12-21 | 2019-04-12 | 杭州宏杉科技股份有限公司 | 快照创建方法、装置、电子设备及机器可读存储介质 |
CN112543237A (zh) * | 2020-11-27 | 2021-03-23 | 互联网域名系统北京市工程研究中心有限公司 | 无锁dns缓存方法和dns服务器 |
Also Published As
Publication number | Publication date |
---|---|
CN113238857A (zh) | 2021-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10296498B2 (en) | Coordinated hash table indexes to facilitate reducing database reconfiguration time | |
US7194589B2 (en) | Reducing disk IO by full-cache write-merging | |
CN107622020B (zh) | 一种数据存储方法、访问方法及装置 | |
CN113612749B (zh) | 一种面向入侵行为的溯源数据聚类方法及装置 | |
CN105095261A (zh) | 数据插入方法和装置 | |
CN112558869B (zh) | 基于大数据遥感影像缓存方法 | |
CN113760847A (zh) | 日志数据处理方法、装置、设备及存储介质 | |
CN116521956A (zh) | 一种图数据库查询方法、装置、电子设备及存储介质 | |
US11886728B2 (en) | Undo capability for memory devices | |
CN114721594A (zh) | 一种分布式存储方法、装置、设备及机器可读存储介质 | |
CN115391341A (zh) | 分布式图数据处理系统、方法、装置、设备及存储介质 | |
CN107133334B (zh) | 基于高带宽存储系统的数据同步方法 | |
CN113238857B (zh) | 一种基于内存池的map映射表多线程遍历方法及装置 | |
US20110302377A1 (en) | Automatic Reallocation of Structured External Storage Structures | |
US10877881B2 (en) | In-place garbage collection of a sharded, replicated distributed state machine based on mergeable operations | |
US8473464B2 (en) | Method and device for data recovery using bit logging | |
US9471409B2 (en) | Processing of PDSE extended sharing violations among sysplexes with a shared DASD | |
CN114253950B (zh) | 管理数据库的方法和装置 | |
CN107832121B (zh) | 一种应用于分布式串行长事务的并发控制方法 | |
CN115576947A (zh) | 一种数据管理方法、装置、组合库、电子设备及存储介质 | |
CN106648550B (zh) | 用于并发执行任务的方法与设备 | |
CN112463460B (zh) | 一种基于纠删码的小块数据恢复方法及系统 | |
US11416390B2 (en) | Tri-color bitmap array for garbage collection | |
CN114138330A (zh) | 基于知识图谱的代码克隆检测优化方法、装置和电子设备 | |
Wang et al. | Isle-tree: A b+-tree with intra-cache line sorted leaves for non-volatile memory |
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 | ||
CP03 | Change of name, title or address |
Address after: 510630 room 1101, building 1, No.16 Keyun Road, Tianhe District, Guangzhou City, Guangdong Province (office use only) Patentee after: Guangdong Yitong Lianyun Intelligent Information Co.,Ltd. Address before: 510630 building 1101, No.16 Keyun Road, Tianhe District, Guangzhou City, Guangdong Province Patentee before: YITONG CENTURY INTERNET OF THINGS RESEARCH INSTITUTE (GUANGZHOU) Co.,Ltd. |
|
CP03 | Change of name, title or address |