• spring boot 2.0之后默认的连接池 HIkariCP介绍


      HIkariCP链接池比之传统的Tomcat JDBC datasource 、c3p0 datasource 等传统链接池优势太大,在获取链接释放链接,执行效率上面高出很多,这个产品的口号是“快速、简单、可靠”。

    官网详细地说明了HikariCP所做的一些优化,总结如下:

    • 字节码精简 :优化代码,直到编译后的字节码最少,这样,CPU缓存可以加载更多的程序代码;
    • 优化代理和拦截器:减少代码,例如HikariCP的Statement proxy只有100行代码,只有BoneCP的十分之一;
    • 自定义数组类型(FastStatementList)代替ArrayList:避免每次get()调用都要进行range check,避免调用remove()时的从头到尾的扫描;
    • 自定义集合类型(ConcurrentBag:提高并发读写的效率;
    • 其他针对BoneCP缺陷的优化,比如对于耗时超过一个CPU时间片的方法调用的研究(但没说具体怎么优化)

      HikariCP为什么这么快

      JDBC连接池的实现并不复杂,主要是对JDBC中几个核心对象Connection、Statement、PreparedStatement、CallableStatement以及ResultSet的封装与动态代理。接下来从几个方面来看看HikariCP为什么这么快:

      优化并精简字节码

      HikariCP利用了一个第三方的Java字节码修改类库Javassist来生成委托实现动态代理。动态代理的实现在ProxyFactory类

      之所以使用Javassist生成动态代理,是因为其速度更快,相比于JDK Proxy生成的字节码更少,精简了很多不必要的字节码。

      

      ConcurrentBag:更好的并发集合类实现

      ConcurrentBag的实现借鉴于C#中的同名类,是一个专门为连接池设计的lock-less集合,实现了比LinkedBlockingQueue、LinkedTransferQueue更好的并发性能。ConcurrentBag内部同时使用了ThreadLocal和CopyOnWriteArrayList来存储元素,其中CopyOnWriteArrayList是线程共享的。ConcurrentBag采用了queue-stealing的机制获取元素:首先尝试从ThreadLocal中获取属于当前线程的元素来避免锁竞争,如果没有可用元素则再次从共享的CopyOnWriteArrayList中获取。此外,ThreadLocal和CopyOnWriteArrayList在ConcurrentBag中都是成员变量,线程间不共享,避免了伪共享(false sharing)的发生。

    使用FastList替代ArrayList

    FastList是一个List接口的精简实现,只实现了接口中必要的几个方法。JDK ArrayList每次调用get()方法时都会进行rangeCheck检查索引是否越界,FastList的实现中去除了这一检查,只要保证索引合法那么rangeCheck就成为了不必要的计算开销(当然开销极小)。此外,HikariCP使用List来保存打开的Statement,当Statement关闭或Connection关闭时需要将对应的Statement从List中移除。通常情况下,同一个Connection创建了多个Statement时,后打开的Statement会先关闭。ArrayList的remove(Object)方法是从头开始遍历数组,而FastList是从数组的尾部开始遍历,因此更为高效。

    Druid和Hikari数据连接池对比:

    Druid是java语言中最好的数据库连接池,并且能够提供强大的监控和扩展功能
    业界把Druid和HikariCP做对比后,虽说HikariCP的性能比Druid高,但是因为Druid包括很多难度的统计和分析功能,所以这也是大家选择使用它的原因,所以说如果你的项目中不需要这些监控、统计之类的功能,可以选择速度更快的HikariCP。

  • 相关阅读:
    3 path核心模块
    2 http
    运输层:TCP 连接管理
    运输层:TCP 流量控制
    运输层:TCP 可靠数据传输
    计算及网路:性能指标
    MySQL 并发控制概述
    运输层:流水线可靠数据传输协议
    运输层:可靠数据传输原理(FSM 描述)
    计算机网络概述
  • 原文地址:https://www.cnblogs.com/Mr-Rocker/p/10535566.html
Copyright © 2020-2023  润新知