hikaricp作为公认的高性能数据源组件,值得我们深入的研究其实现方式。
在看源码之前我们先思考几个问题:
- 如果我们自己设计一个线程池来管理db连接应该如何设计?
- 借助哪些技术可以提高线程池的性能?
- 如何维护db的连接?
下面来看hikaricp的实现
设计一个连接池
数据结构
为了性能,自定义数据结构:FastList、ConcurrentBag
主要就是ConcurrentBag使用threadLocal、shareList、等待queue 对获取connnection做了优化。
定时器相关的使用:scheduleWithFixedDelay(Runnable command,long initialDelay, long delay, TimeUnit unit) 前一个任务执行完后,间隔多少秒执行
代理模式的使用
底层库里 inner class的使用
工具类里:PropertyElf、ClockSource
SuspendResumeLock 通过配置文件结合Semaphore来限制获取连接的速度,默认是10000
代理:
HikariProxyConnection 为什么要使用代理来搞呢?
看作者怎么回答的:
网友评论