数据库连接池以及配合线程池存在的问题

数据库连接池是什么?

  • 数据库连接池利用的是一种池化的思想,其存在的目的是为了减少资源频繁的创建和销毁所带来的开销。

数据库连接池的作用?

  • 每一次客户端操作数据库都时候,都会创建一个连接。连接池的作用是提前初始化一部分的连接,保存在连接池里面。这里包括数据库的登录等。
  • 当应用程序需要操作数据库的时候,每一次只用从连接池当中取一个连接操作即可,避免了每一次连接的建立和释放带来的性能开销。

连接池的参数?

  1. 最大连接数:连接池中可以容纳的最大的连接数量;
  2. 当前连接数:表示此刻连接池中正在被使用的连接数;
  3. 当前空闲连接数:表示当前连接池的空置连接数。

工作流程

初始化

初始化连接池–包括连接数据库的账号密码、数据库名、最大连接数等–创建最大连接数个数据库连接–将这些连接压入数据库连接队列

  • 每一次创建成功,压入队列后需要将空闲连接数+1

提供获取、释放、销毁的方法

  • 提供获取连接的方法:队列不为空—等待信号量–队列加锁–取队列头–空闲数-1–工作数+1–解锁
  • 释放连接的方法:队列加锁–尾插队列–空闲+1–忙碌-1–解锁–发信号消费
  • 销毁连接池:加锁–遍历整个队列–通过close方法关闭连接-空闲置为0–当前存活置为0–清空队列–解锁

其它

  • 设计数据库连接池的时候最好采用单例模式,保证只有一个数据库连接池的示例存在于应用程序中,这样可以更好地管理和贡献连接资源。
  • 当数据库连接池配合线程池使用的时候,需要考虑线程竞争连接情况,如果连接池连接不足,将会引起线程等待或超时,降低响应的速度。同时,数据库连接过程也会发生阻塞的情况,这会使得线程池中的活跃线程数量下降,也会影响性能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值