连接池和单例的一些个人理解

 

       首先考虑一个问题, 为什么需要连接池?

看了很多网上的帖子和回答, 千篇一律的表述都是说:"因为对数据库操作, 要先建立连接,操作后,再关闭连接,当多个连接,频繁操作数据库时比较耗时耗费资源, 所以采用连接池,提前建立多个连接, 当有数据库操作的时候, 直接到连接池里取空闲连接就行了,节省了建立连接和关闭连接的开销." 然后就是贴了一堆连接池的代码, 这样的描述是很对, 但是就是给人一种浮于表面的感觉,就是不那么一针见血有没有!

大家难道就没有一个质疑,如果只是为了减少频繁创建和销毁连接这个需求,那么我把配置连接和销毁的部分封装成一个单例类就可以了啊, 多线程多任务操作的时候,直接调用这个单例就好了嘛,那为什么还要用连接池呢?

以下是个人解惑的一些观点:

1. 先说多连接与单连接

如果数据库内部的执行是并行的, 则显而易见的多连接的性能要高于单连接很多很多; 但是往往我们使用的redis mysql啊,都是顺序执行的, 并发也是由于轮询的比较快,给人一种并行的感觉.内部再配合一些锁机制保证数据的安全. 所以在数据库执行这块, 显然单连接和多连接并没有分出个高低.

2.  顺序执行没分出高低,我们把注意力放在调度和数据传输上

这一块也是要耗费时间的, 这里我也是看到了一个帖子, 我放到下面.

我这里打个比方, 比如去一家小饭馆吃饭, 饭店有一个厨师,一个服务员, 此时来了五桌客人点菜, 扫码点餐, 咱保证同时下单, 服务员把单子给厨师, 厨师按照单子,依次做了五个菜,  这一个服务员分别把菜送到五桌客人那, 比如厨师做一个菜用100ms, 则五个菜就是500ms, 这一个服务员端一个菜20ms, 则总时间加一起, 500 + 20 * 5 = 600ms.

此时如果是多连接, 比如店里有五个服务员, 则厨师做五个菜还是500ms, 但是五个服务员可以同时把五个菜分别送到五桌客人那,当然了这个只是理想上的同时, 那么总时间就是500 + 20 = 520ms.

这么看优势并不是很明显, 如果说三个菜, 店里虽然有五个服务员,但是只需要三个服务员上菜, 两个服务员空闲, 再来考虑优势就更不明显了.

所以连接池的优势应该体现在高并发的情况下, 比如要100个菜, 一个店里有一个服务员和有5个服务员上菜的优势就体现出来了, 真快啊. 还有就是使用连接池可以对连接有个限制, 如果使用单例, 不考虑限制,最后由于并发的任务多了, 可能严重影响系统的性能,系统调用的时间等等都延长, 而连接池也不是说建立的连接越多越好,肯定都是综合考虑,根据使用需求进行设计的. 

如果有补充的,或者有自己想法的,也可以评论,大家一起讨论一下.感谢.

下面这个链接是翻了这么多唯一能给自己解惑的帖子.

lettuce连接池真有必要吗?_lettuce 连接池_小子太跳的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值