实现自己的连接池(一)
内存池,对象池,连接池,线程池等等 我们写程序中,有很多"池子"。这方面资料网上很多,最近在整理自己的一些东西,把这方面资料整理下。
分四篇文章 池子基本要素分析 jedis pool(Java)分析 sync.Pool(go)分析 总结
池子基本要素
一般我们使用的时候,基本是下面几步:
1.程序开始,根据一定条件(会话或其它)初始化池子
2.从池子中获取到想要的对象
3.使用完后返回
4.程序结束,销毁池子
好了,逐条分析,我们对要求的"翻译"如下:
它可以存放一些我想要的对象
它需要提供一个方法让我能取出一些对象,而不需要我太多关注初始化对象
它可以帮我管理好,使用完后这些对象怎么处理
它可以帮我监控这些对象的有效性,让我一直能用到有效的对象
最好还能让我想要关心细节的时候,提供一些内部的数据(如:申请过多少次,多少失效等等)
抽象一下,这个对象应该有下面几个属性或方法:
属性:
PoolConfig 管理一些配置
PooledObjectCreator 生产池子中保存的对象
某种Deque 存放生产出的对象
Evictor 负责驱逐池子中保存的无效对象
方法:
init,destroy 初始化,销毁方法,负责根据配置做相应舒适化
getObject 从池子中取出对象
putObject 对象使用完后放回池子中
invalidateObject 把对象置于无效
get相关内部元素 比如 totalCount、 idleNum、activeNum等池子状态的方法
下一篇结合,具体实例分析如果实现一个自己的pool
转载于:https://www.cnblogs.com/claresun/p/4493029.html
实现自己的连接池(一)相关推荐
- 连接池和协程池为何能提升并发能力?
你有没有发现,"内存池"和"进程池"都带有"池"字?其实,这两种技术都属于"池化技术".它通常是由系统预先分配一批资源并 ...
- evt参数是干啥用的_http连接池中非常关键的两个参数,到底是干啥用的?
作者简介:大厂一线资深开发.从crud开发到资深开发,再到研究员兼技术经理.<资深开发讲技术> 从一线实战中总结有故事,有背景的案例,希望带给大家一系列技术盛宴. 求关注,欢迎技术交流.友 ...
- python redis连接池获取后关闭_python通过连接池连接redis,操作redis队列
在每次使用redis都进行连接的话会拉低redis的效率,都知道redis是基于内存的数据库,效率贼高,所以每次进行连接比真正使用消耗的资源和时间还多.所以为了节省资源,减少多次连接损耗,连接池的作用 ...
- mysql连接池为何不用nio_为什么要用数据库连接池?
1.为什么要用数据库连接池? 最原始的数据库使用就是打开一个连接并进行使用,使用过后一定要关闭连接释放资源.由于频繁的打开和关闭连接对jvm包括数据库 都有一定的资源负荷,尤其应用压力较大时资源占用比 ...
- net core mysql 连接池_EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽
EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽 发布时间:2019-02-18 22:05, 浏览次数:1152 , 标签: EF Core DbContextPool ...
- java 线程 连接池_java程序实现线程连接池功能
下面是以前学java 的时候写的一个实现,没有考虑很多,比如同步处理等等.懒得改,你就看看吧. package com.wangjia.tools; import java.io.Serializab ...
- dbcp 连接池参数说明
dbcp 连接池参数说明 参考: http://commons.apache.org/proper/commons-dbcp/configuration.html https://www.cnblog ...
- springboot添加多数据源连接池并配置Mybatis
springboot添加多数据源连接池并配置Mybatis 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190226.html May 12, 2018 ...
- JDBC数据源连接池(1)---DBCP
何为数据源呢?也就是数据的来源.我在前面的一篇文章<JDBC原生数据库连接>中,采用了mysql数据库,数据来源于mysql,那么mysql就是一种数据源.在实际工作中,除了mysql,往 ...
- 使用 TFDConnection 的 pooled 连接池
从开始看到这个属性,就一直认为他可以提供一个连接池管理功能, 苦于文档资料太少, 甚至在帮助中对该属性的使用都没有任何介绍,如果你搜索百度,也会发现基本没资料. 最后终于在其官方网站看到了其完整相关的 ...
最新文章
- 2015-2016-2 《Java程序设计》 学生博客及Git@OSC 链接
- 软件开发计划_敏捷软件开发实践:估算与计划读书笔记113第11章 确定渴望度优先级...
- 【hdu5285】wyh2000 and pupil
- Effective Java之不要忽略异常(六十五)
- (深入.Net平台和C#编程)第七章.上机练习.20170412
- ConEmu状态栏的设置介绍
- matlab im2double
- 【流媒體】live555—VS2010 下live555编译、使用及测试
- Silverlight获取子控件和父控件方法
- pandas根据现有列新添加一列
- 必学:入行电商产品经理必备知识,原来这么简单
- ts无损剪辑合并_视频如何合并?视频合并太难?其实很简单
- nginx在Linux系统安装
- nginx 同一服务器部署多个网站
- HDU6397 Character Encoding 插板法+容斥
- SEO及SEM学习参考资源
- 还儿童一个健康上网环境,正式开启我的路由器URL网址白名单之旅
- Java - 加号(+)的作用
- MBR膜生物反应器,生物反应器原理-世来福
- java开发 与c sharp 开发思想_Java与CSharp的相同与不同
热门文章
- 编译-编译原理C/C++ 静态链接库(.a) 与 动态链接库(.so)
- python中的模运算符_Python中的字符串模运算符与format函数
- WPF中制作带中国农历的万年历
- 20180611-20180615
- 从源码角度入手实现RecyclerView的Item点击事件
- 找出如下数组中最大的元素和最小的元素, a[][]={{3,2,6},{6,8,2,10},{5},{12,3,23}}
- 老李分享:系统可用性评估
- Func与Action
- FW: HTTP错误500显示具体的出错信息的方法
- GridView 模版列编辑状态Dropdownlist 事件