内存池,对象池,连接池,线程池等等 我们写程序中,有很多"池子"。这方面资料网上很多,最近在整理自己的一些东西,把这方面资料整理下。
分四篇文章 池子基本要素分析 jedis pool(Java)分析 sync.Pool(go)分析 总结
池子基本要素
一般我们使用的时候,基本是下面几步:
1.程序开始,根据一定条件(会话或其它)初始化池子
2.从池子中获取到想要的对象
3.使用完后返回
4.程序结束,销毁池子
好了,逐条分析,我们对要求的"翻译"如下:
它可以存放一些我想要的对象
它需要提供一个方法让我能取出一些对象,而不需要我太多关注初始化对象
它可以帮我管理好,使用完后这些对象怎么处理
它可以帮我监控这些对象的有效性,让我一直能用到有效的对象
最好还能让我想要关心细节的时候,提供一些内部的数据(如:申请过多少次,多少失效等等)
抽象一下,这个对象应该有下面几个属性或方法:
属性:
PoolConfig 管理一些配置
PooledObjectCreator 生产池子中保存的对象
某种Deque 存放生产出的对象
Evictor 负责驱逐池子中保存的无效对象
方法:
init,destroy 初始化,销毁方法,负责根据配置做相应舒适化
getObject 从池子中取出对象
putObject 对象使用完后放回池子中
invalidateObject 把对象置于无效
get相关内部元素 比如 totalCount、 idleNum、activeNum等池子状态的方法
下一篇结合,具体实例分析如果实现一个自己的pool