[发明专利]一种基于全局管理的内存池管理方法有效
申请号: | 201710158163.6 | 申请日: | 2017-03-16 |
公开(公告)号: | CN108595259B | 公开(公告)日: | 2021-08-20 |
发明(设计)人: | 王志刚 | 申请(专利权)人: | 哈尔滨英赛克信息技术有限公司 |
主分类号: | G06F9/50 | 分类号: | G06F9/50;G06F12/02 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 150001 黑龙江*** | 国省代码: | 黑龙江;23 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 全局 管理 内存 方法 | ||
本发明提供了一种基于全局管理的内存池管理方法,包括如下步骤:S1、本内存池管理方法共分两部分实现:一部分用于工作线程的申请释放即内存管理模型的内存分配回收操作,另一部分是管理线程对各私有内存池空闲节点的迁移操作;S2、程序初始化时为每一个线程都建立一块线程私有内存池;S3、每个线程向自己的线程私有内存池申请释放内存节点;S4、全局管理线程对每一个线程私有内存池中的节点数进行平衡操作;S5、如果所有的线程私有内存池中的空闲节点都低于警报阈值,则向系统申请内存,并释放给内存;S6、线程释放内存节点时;S7、将相应线程的内存节点放入相应的线程私有内存池中。能够有效提高内存分配释放效率以及内存使用率。
技术领域
本发明涉及内存池管理方法技术领域,尤其涉及一种基于全局管理的内存池管理方法。
背景技术
在高性能网络爬虫系统中,大量的网络IO交互需要频繁的进行内存申请释放操作,高效的内存管理在很大程度上决定着整个网络爬虫系统的性能。人们在内存管理方面做了大量的研究,提出了许多各种各样的内存管理模型。例如ptmalloc、tcmalloc、内存池等内存管理方法。ptmalloc是glibc使用的内存管理模型,ptmalloc对大内存分配和小内存分配提供不同的分配策略,是一套功能十分完善的内存管理模型。但是,在多线程环境下,由于其分配释放内存都需要进行加锁操作,因此内存管理效率较为低下。tcmalloc通过更改内存管理策略,能够有效的控制内存碎片,降低频繁的内存分配释放带来的性能损耗。但是相比于内存池,内存的分配释放效率更为低下。内存池模型又分为定长内存池和变长内存池。内存池在使用之前预先申请大量的内存块,当有新的内存需求时,就从内存池中分出一部分内存块使用。使用这种内存管理模型存在的问题是当在多线程环境下使用时需要进行加锁解锁操作,增加时间开销。线程私有内存池为每一个线程都建立一块内存区,不需要进行加锁和解锁操作,提高了内存分配释放的效率。但是由于每一个线程内存使用情况不同,会出现个别线程继续内存资源而个别线程内存资源极度富余的情况,使得内存利用率降低。
发明内容
本发明的目的在于提供一种在多线程环境下具有更高效的内存分配释放效率以及更高利用率的内存池管理方法。
为解决上述技术问题,本发明提供了一种基于全局管理的内存池管理方法,包括如下步骤:
S1、本内存池管理方法共分两部分实现:一部分用于工作线程的申请释放即内存管理模型的内存分配回收操作,另一部分是管理线程对各私有内存池空闲节点的迁移操作;
S2、程序初始化时为每一个线程都建立一块线程私有内存池,内存池使用循环队列结构实现;
S3、每个线程向自己的线程私有内存池申请释放内存节点;
S4、全局管理线程对每一个线程私有内存池中的节点数进行平衡操作,如果某一个线程私有内存池中的空闲节点数量小于警报阈值,则从其他空闲节点富余的线程私有内存池装中取出节点放入该空闲节点短缺的线程私有内存池中;
S5、如果所有的线程私有内存池中的空闲节点都低于警报阈值,则向系统申请内存,并释放给内存;
S6、线程释放内存节点时,首先判断节点是否属于本线程,如果是本线程的节点,则直接放置回本线程的线程私有内存池中,如果该内存节点是单独向系统申请的,则释放给系统,如果该内存节点属于其他线程,则将该节点放入垃圾回收队列供全局管理线程同一处理;
S7、全局管理线程轮询每一个线程的垃圾回收队列,将相应线程的内存节点放入相应的线程私有内存池中。
本申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于哈尔滨英赛克信息技术有限公司,未经哈尔滨英赛克信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710158163.6/2.html,转载请声明来源钻瓜专利网。