[发明专利]高性能Golang内存池的实现方法、装置与电子设备有效
申请号: | 201911082587.4 | 申请日: | 2019-11-07 |
公开(公告)号: | CN110874269B | 公开(公告)日: | 2022-05-06 |
发明(设计)人: | 向阳;邱布衣;李灼锋 | 申请(专利权)人: | 北京云杉世纪网络科技有限公司 |
主分类号: | G06F9/50 | 分类号: | G06F9/50 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王宇杨 |
地址: | 100083 北京市海*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 性能 golang 内存 实现 方法 装置 电子设备 | ||
1.一种高性能Golang内存池的实现方法,其特征在于,包括:
创建高性能Golang内存池,所述高性能Golang内存池由第一Golang原生对象池和第二Golang原生对象池组成;
若接收到第一调用指令,则申请所述第一Golang原生对象池中的对象切片,并返回所述第一Golang原生对象池中的指定对象,同时修改所述第一Golang原生对象池的对象切片的长度,所述第一调用指令为申请者要求调用所述高性能Golang内存池中Get函数的指令;
根据修改后第一Golang原生对象池的对象切片的长度,确定释放所述第一Golang原生对象池的对象切片的策略;
其中,所述创建高性能Golang内存池的步骤还包括:
将所述第一Golang原生对象池的New函数设置为能返回一个长度为N、容量为N的对象切片的函数,将所述第二Golang原生对象池的New函数设置为能返回一个长度为0、容量为N的对象切片的函数;
所述修改所述第一Golang原生对象池的对象切片的长度的步骤具体包括:
假设修改前所述第一Golang原生对象池的对象切片的长度为n1,则将对象切片S1的长度修改为n1-1;
相应的,所述确定释放所述第一Golang原生对象池的对象切片的策略的步骤具体包括:
若n1-10,则调用所述第一Golang原生对象池的Put函数,来释放对象切片S1;
若n1-1=0,则调用所述第二Golang原生对象池的Put函数,来释放对象切片S1。
2.根据权利要求1所述的高性能Golang内存池的实现方法,其特征在于,还包括:
若接收到第二调用指令,则申请所述第二Golang原生对象池中的对象切片,并将所述指定对象追加到所述第二Golang原生对象池的对象切片的末尾,同时修改所述第二Golang原生对象池的对象切片的长度,所述第二调用指令为释放者要求调用所述高性能Golang内存池的Put函数的指令;
根据修改后第二Golang原生对象池的对象切片的长度,确定释放所述第二Golang原生对象池的对象切片的策略;
其中,所述申请所述第二Golang原生对象池的对象切片的步骤具体包括:
根据所述高性能Golang内存池中Put函数的请求,从所述第二Golang原生对象池中申请一个对象切片S2,对象切片S2的长度为n2;
所述修改所述第二Golang原生对象池的对象切片的长度的步骤具体包括:将对象切片S2的长度修改为n2+1;
相应的,所述确定释放所述第二Golang原生对象池的对象切片的策略的步骤具体包括:
若n2+1=N,则调用所述第一Golang原生对象池的Put函数,来释放对象切片S2;
若n2+1N,则调用所述第二Golang原生对象池的Put函数,来释放对象切片S2,N表示所述第二Golang原生对象池的对象切片的容量。
3.根据权利要求1或2所述的高性能Golang内存池的实现方法,其特征在于,所述返回所述第一Golang原生对象池中的指定对象的步骤具体包括:
根据所述高性能Golang内存池中Get函数的请求,从所述第一Golang原生对象池中申请一个对象切片S1,并获取对象切片S1中末尾的对象作为所述指定对象,以返回给所述高性能Golang内存池中Get函数。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京云杉世纪网络科技有限公司,未经北京云杉世纪网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911082587.4/1.html,转载请声明来源钻瓜专利网。