[发明专利]一种基于内存池的map映射表多线程遍历方法及装置有效
申请号: | 202110429607.1 | 申请日: | 2021-04-21 |
公开(公告)号: | CN113238857B | 公开(公告)日: | 2022-10-14 |
发明(设计)人: | 刘启波;黄永;陈智亮;池仲柏;李秀海;周先冬;叶丽丽 | 申请(专利权)人: | 宜通世纪物联网研究院(广州)有限公司 |
主分类号: | G06F9/50 | 分类号: | G06F9/50;G06F3/06 |
代理公司: | 广州嘉权专利商标事务所有限公司 44205 | 代理人: | 常柯阳 |
地址: | 510630 广东省广州市天*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 内存 map 映射 多线程 遍历 方法 装置 | ||
本发明公开了一种基于内存池的map映射表多线程遍历方法及装置,方法包括:周期性建立遍历线程,所述遍历线程用于遍历存量链表,所述存量链表中包括目标单元;识别所述目标单元的状态信息,所述状态信息包括空闲状态和非空闲状态;根据所述目标单元的状态信息连续访问内存块的目标链表项;根据所述目标链表项识别所述目标单元的指示标志;根据所述指示标志获取目标实例;将所述目标实例写入磁盘快照文件。本发明能够提高快照生成速度,可广泛应用于通信技术领域。
技术领域
本发明涉及通信技术领域,尤其是一种基于内存池的map映射表多线程遍历方法及装置。
背景技术
在通讯系统中,涉及很多映射表这类功能需求,如DNS映射表、路由表关系映射表等。映射表是用来存放键-值对,可以通过键快速查找到对应的值,常规的做法是用map数据结构实现键-值关系映射。系统要求在保证系统对外正常服务的同时,需要周期性对该映射表的数据生成快照。快照(Snapshot)是指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点的映像。快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。快照的作用主要是能够进行在线数据备份与恢复。
通讯系统的流量规模通常比较大,业务繁忙,对映射表的更新查询等业务操作非常频繁,所以必需在保证业务功能尽量不受影响的情况,实现高效的快照功能。
现有方法包括:一种是串行处理,在暂停对外服务之后,进行快照生成,然后再恢复对外服务;另一种是对映射表加互斥锁(或对元素加细粒度锁),需等待得到资源锁后,对映射表元素进行访问,生成快照,然后释放资源锁;还有一种典型做法是通过fork函数clone进程的方式创建父进程副本,副本包括父进程数据空间、堆、栈等资源,然后在副本进程做快照。
上述现有的实现方法,串行方式和引入锁方式,会造成对外服务的卡顿,会造成资源互斥等待,从而导致系统吞吐能力下降,甚至出现服务不可用等瘫痪状态,未能充分发挥多核并行运算特性;clone进程的方式,当映射表的数据量比较大时,克隆进程副本时会占用大量的系统资源和处理时间,同样造成服务卡顿、服务超时等较大影响。
发明内容
有鉴于此,本发明实施例提供一种速度快的基于内存池的map映射表多线程遍历方法及装置。
本发明的第一方面提供了一种基于内存池的map映射表多线程遍历方法,包括:
周期性建立遍历线程,所述遍历线程用于遍历存量链表,所述存量链表中包括目标单元;
识别所述目标单元的状态信息,所述状态信息包括空闲状态和非空闲状态;
根据所述目标单元的状态信息连续访问内存块的目标链表项;
根据所述目标链表项识别所述目标单元的指示标志;
根据所述指示标志获取目标实例;
将所述目标实例写入磁盘快照文件;
其中,读取数据的线程和写入数据的线程彼此分离。
优选地,所述方法还包括:
通过多个固定大小的内存块构建固定内存池;
其中,所述内存池包括存量链表和空闲链表;所述存量链表用于对新增的内存块进行管理;所述空闲链表用于对空闲的内存块进行管理。
优选地,所述目标单元包括一个布尔型stat字段、一个无符号整型index字段和两个Object实例;
其中,所述stat字段,用于表征所述目标单元的状态信息,所述状态信息包括空闲状态和非空闲状态;
所述index字段,用于表征所述目标单元使用的目标实例;
所述Object实例,用于存储不同数据类型的值。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于宜通世纪物联网研究院(广州)有限公司,未经宜通世纪物联网研究院(广州)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110429607.1/2.html,转载请声明来源钻瓜专利网。