[发明专利]一种降低系统内存分配释放冲突的方法有效
申请号: | 201710428101.2 | 申请日: | 2017-06-08 |
公开(公告)号: | CN107391253B | 公开(公告)日: | 2020-12-08 |
发明(设计)人: | 刘马良;张强;李邦戈;潘亚楠;李星;刘鼎三 | 申请(专利权)人: | 珠海金山网络游戏科技有限公司;珠海西山居移动游戏科技有限公司 |
主分类号: | G06F9/50 | 分类号: | G06F9/50 |
代理公司: | 广州嘉权专利商标事务所有限公司 44205 | 代理人: | 俞梁清 |
地址: | 519000 广东省珠*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 降低 系统 内存 分配 释放 冲突 方法 | ||
本发明的技术方案包括一种降低系统内存分配释放冲突的方法,用于实现:A.服务器启动时,创建由多个等同大小内存池组成的内存池组,初始化索引编号并设置下次被请求的内存池序号;B.根据线程请求,分配所述步骤A设置的内存池序列号,并同时修改索引编号;C.将已分配的内存池编号存储至内存块头部保留字段;D.当已分配内存池释放时,获取保留字段中的内存池编号并发送至对应的内存池。本发明的有益效果为:使得同一时刻的内存分配请求被分散到多个内存池中,降低了多线程分配内存请求时的锁竞争;由于分配的内存分散在多个内存池中,可以降低释放操作导致的锁竞争,可以显著降低内存分配及释放操作带来的锁等待时间。
技术领域
本发明涉及一种降低系统内存分配释放冲突的方法,属于计算机服务器数据处理领域。
背景技术
服务器需要处理大量用户的请求,大部分服务器都会使用多线程技术来提升多核CPU的利用率,而内存作为一个进程中多个线程的共享资源,当多个线程同时请求内存分配或释放时,为了保持内存的正确性,操作系统会使用线程锁,每次只能执行一个线程的请求,其他线程则需要等待线程锁,待前一个分配请求完成后再继续执行,因而降低了系统并发度。
一般来说,服务器会通过设置内存池,避免每次内存的申请与释放都通过调用系统提供的相关API接口,部分服务器也会根据分配的内存大小,对内存池的设计进行相关优化,尽可能提升内存分配与释放的速度,进而提升系统性能。
随着服务器硬件水平的不断提升,操作系统可用的内存越来越大,因此服务器可用内存也越大,通过在服务器启动时,分配多个内存池(每个内存池预先分配一定数量的内存),组成内存池组,每次请求内存分配时,依据一定的算法,从内存池组中挑选一个内存池,然后从该内存池中分配内存,并在分配的内存的头部保留一个字段用来记录内存池编号,当该内存被释放时,根据其头部保留字段存储的编号,释放到对应的内存池中。同一时刻多个线程请求内存分配时,每个线程选择的内存池不一样,这些线程可以并发的执行内存分配请求,从而可以提升系统并发度。
发明内容
针对现有技术的不足,本发明的技术方案提供了一种降低系统内存分配释放冲突的方法,用于将内存分配及释放请求分散在多个内存池中,以降低多线程内存分配释放操作导致的冲突,提高多线程并发度从而提升系统性能。
本发明的技术方案包括一种降低系统内存分配释放冲突的方法,其特征在于,该方法包括:A.服务器启动时,创建由多个等同大小内存池组成的内存池组,初始化索引编号并设置下次被请求的内存池序号;B.根据线程请求,分配所述步骤A设置的内存池序列号,并同时修改索引编号;C.将已分配的内存池编号存储至内存块头部保留字段;D.当已分配内存池释放时,获取保留字段中的内存池编号并发送至对应的内存池。
根据所述的降低系统内存分配释放冲突的方法,其中的步骤A还包括:启动服务器进程,创建多个内存池,其内存池编号依次为[0,1,2...(N-1)],内存池编号为[0,1,2...(N-1)]中所有内存池组成一个内存池组,并为每个内存池组分配等同大小的内存空间;创建与内存池对应的索引编号Index,使用Index记录下一次内存分配请求应该选择的内存池序号,并将Index初始化为0。
根据所述的降低系统内存分配释放冲突的方法,其中的步骤B还包括:当服务器线程请求分配内存时,使用Index对应编号的内存池进行内存分配,并在被分配内存块中增加一个保留字段,以及,修改Index为(Index+1)(mod N);当其他服务器线程再次请求分配内存时,自动循环分配后续编号的内存池。
根据所述的降低系统内存分配释放冲突的方法,其中的步骤D还包括:服务器使用分配的内存存储用户请求的数据包和/或待发送给用户的响应包,当完成请求和/或响应处理后释放内存块,取出内存块中对应的内存池编号,并将取出的内存池编号对应的内存释放至[0,1,2...(N-1)]内存池组中。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于珠海金山网络游戏科技有限公司;珠海西山居移动游戏科技有限公司,未经珠海金山网络游戏科技有限公司;珠海西山居移动游戏科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710428101.2/2.html,转载请声明来源钻瓜专利网。