[发明专利]一种多线程下的内存管理方法在审
申请号: | 201410508410.7 | 申请日: | 2014-09-28 |
公开(公告)号: | CN104881324A | 公开(公告)日: | 2015-09-02 |
发明(设计)人: | 孙一桉;李凯斌 | 申请(专利权)人: | 北京匡恩网络科技有限责任公司 |
主分类号: | G06F9/50 | 分类号: | G06F9/50 |
代理公司: | 北京连和连知识产权代理有限公司 11278 | 代理人: | 武硕 |
地址: | 102209 北京市昌平区*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 多线程 内存 管理 方法 | ||
技术领域
本发明涉及计算机技术领域,尤其涉及一种多线程下的内存管理方法。
背景技术
出于对安全和效率的考虑,许多应用程序并不使用操作系统提供的内存管理,而是使用自身所具有的内存管理功能。对于多线程的应用程序,当多个线程同时访问同一资源时,必须采用合理的机制,例如互斥锁、信号量等,来避免线程之间发生冲突。
在多线程运行状况下进行内存管理时,程序经常面临一种矛盾,即当多个线程通过互斥锁访问内存队列时,经常会有线程处于暂停状态,一直要等待其它线程释放互斥锁,该线程拿到内存队列的访问权,才能继续运行。
从实践经验中看,当程序新开始处理一个事务时,多个线程都会申请新的内存。当事务处理完成时,各个线程又都在释放使用完成的内存。此时对于内存分配、释放的资源冲突将会频繁发生,常常会有线程被迫暂停,大大降低了程序的运行效率。
发明内容
本发明的目的是为了解决多线程下的内存管理中,多个线程通过同一套互斥锁访问内存队列而存在的效率低下问题。
为了解决此问题并实现发明目的,本发明提供了一种多线程下的内存管理方法,其技术方案如下:
一种多线程下的内存管理方法,向每个线程分配独立内存池,所述内存池分配包括三个部分:申请内存队列、释放内存队列以及该队列的互斥锁,每块内存内嵌内存池标识,所述内存管理方法包括内存队列初始化、内存申请、内存释放以及释放内存队列的回收。
进一步地,内存申请过程分为以下步骤:步骤a1,查看本线程的申请内存队列是否有足够的内存,足够则直接分配;步骤a2,如果步骤a1中内存不足,则将释放内存队列中的内存块放回申请内存队列;步骤a3,检查释放内存队列中是否有内存块;步骤a4,如果步骤a3中释放内存队列中有内存块,如果有,则进行队列合并操作。
进一步地,内存释放过程分为以下步骤:步骤b1,确定待释放内存块是否属于本线程内申请的,是则直接执行合并操作;步骤b2,如果步骤b1中待释放内存块不属于本线程内申请的,则获取本线程互斥锁;步骤b3,执行合并操作;步骤b4,释放互斥锁。
进一步地,每个线程的申请内存队列为本线程专用。
进一步地,释放内存队列可以由多个线程使用,所述释放内存队列由互斥锁提供保护。
本发明所取得的有益效果为:
1.将传统内存管理方法中多个线程申请一个互斥锁变为对多套互斥锁的申请,大大分散了资源访问的目标,原先对于一个互斥锁的竞争,分散为对多个互斥锁的请求。从理论上讲,如果有N个线程,则对每个互斥锁的访问次数只有原先的N分之一,从而有效降低了资源冲突的频率。
2.将内存队列被拆分为申请、释放两个队列。申请内存队列仅由本线程使用,不存在资源冲突,仅在多个线程访问释放队列时有可能产生冲突,大大降低了冲突频率。
附图说明
图1为本发明的多线程内存管理方法的内存管理示意图;
图2为本发明的多线程内存管理方法的内存申请流程图;
图3为本发明的多线程内存管理方法的内存释放流程图。
具体实施方式
下面结合附图以及具体实施例,对本发明的内容进行进一步的阐释。
图1所示为本发明的内存管理方式,程序运行时可以包括N个线程,N个线程中的每个都有自己的两个内存队列:一个申请内存队列,一个释放内存队列并且每个线程都有专属该线程的互斥锁。每个线程仅可以从本线程的申请内存队列中申请和释放内存。在程序运行过程中,线程1申请到的内存可以被传递到线程2。当线程2使用完该内存后,必须将此内存释放回线程1的申请内存队列。否则,就会导致线程1的申请内存队列越来越小,最终全部用光,线程1无法再继续工作。
此外,每个线程的互斥锁仅用于释放内存队列。当线程申请内存时,无需检查互斥锁的状态,可以直接从申请内存队列中取用内存块,因为线程的申请内存队列只专属于本线程使用,不存在资源冲突问题。
当线程释放内存时,如果是其它线程的内存,则必须检查互斥锁,因为在此同时,别的进程可能也会释放内存到这个释放内存队列。为了防止资源冲突,每次释放其它线程的内存之前,必须检查相应的互斥锁状态。
在对多线程下的内存进行管理时,先将内存队列进行初始化,在初始化时,所有内存块都保存在申请内存队列中,释放内存队列为空。
如图2所示,在进行内存申请操作时,首先查看本线程的申请内存队列状态。检查此队列中使用和剩余的内存块是否还有20%没有分配出去。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京匡恩网络科技有限责任公司,未经北京匡恩网络科技有限责任公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410508410.7/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种存储系统及其使用的方法
- 下一篇:一种可伸缩的生成文本的方法