Hikari数据库连接池-高性能实现原理-核心流程设计迭代
2020-10-28 20:46:54 15 举报
HikariCP高性能核心流程,流程实现分析
作者其他创作
大纲/内容
遍历sharedList,获取未使用状态的obj
失败
异步任务:对象池创建对象,放入sharedList和handoff队列,按当前等待数量来创建
lock
一般连接池设计同理对象池
未超时
判断borrow超时
将对象放到threadLocal队列FastList
等待连接的线程计数器+1
从threadLocal队列遍历未使用的obj从后往前遍历
returnObj
是
返回异常
获取当前总obj数量,假设为10,并设置startSeq=10
遍历handoff队列,获取对象
返回连接
成功
判断是否达到最大Obj数量
是,证明有新的obj
否
对象池创建对象,塞到idle队列和All队列
将对象放回Idle队列
异步任务:对象池创建对象,放入sharedList
超时
borrowObj
判断是否当前线程创建的obj
Queue-stealing
1.一个总队列即可,sharedList,无需idleList,通过状态判断是否可用2.threadLocal队列是存放引用,加快线程再次获取对象3.无锁4.状态操作大量使用CAS
1.一个总队列即可,sharedList,无需idleList,通过状态判断是否可用2.threadLocal队列是存放引用,加快线程再次获取对象3.无锁4.状态操作大量使用CAS5.创建新对象后,无需遍历sharedList,而是利用handoff同步队列提高命中
判断startSeq<当前obj总量
如果等待线程计数器大于0,将其放到handoff队列
ThreadLocal caching
并发能力大幅度提升hikari-2.6.0
将对象设置为可用lazySet
成功获取
并发性能区别于其他连接池的核心hikari-2.4.0
从Idle队列拿走一个Obj
Idle队列:每次获取和释放都从Idle队列操作All队列:对象创建和销毁时操作,限制最大数量
Direct hand-off optimizations
0 条评论
下一页