首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

谈优化:池相关内容

缘起

如果每次都类似:

我们经常提到线程池,数据库连接池,那么这个地方是否也应该用一种池的做法呢?

数据库连接池、线程池

数据库连接池、线程池那么的相似但是又不一样,让我想起来几周前和VIVO峰交流过这个问题。

下面是交流的大概结论:

数据库连接池和线程池不一样的,表面上似乎一样:线程池是线程的池子,数据库连接池是数据库连接的池子(好像是废话,哈哈),但是呢,线程池的线程不会跑出池子,数据库连接池的连接会跑出去,这使得他们内部的实现差异很大,数据库连接池就是应用程序会从连接池中,把连接拿走,close的时候,再还回数据库连接池,连接池要维护连接的可用性,最大连接数,还会有最大获取连接的等待时间,那么问题来了 数据库连接池 应该配置多少毕竟合适(这又是另外一个话题了),如果达到了最大连接数,并且连接池的连接全部被拿走了,这个时候再获取连接,需要等待,超时就会抛异常了。

不错的一篇线程池文章:深入分析java线程池的实现原理。

说到这里,我们应该对数据库连接池、线程池有个大概的了解了,从这里看我们上面的socket这个特性与数据库连接更像,下面我们谈谈怎么来实现。

池的实现

既然是池那么是否有一个容器进行存放这个资源,还必须要提供从容器取资源,和归还资源到容器的操作。

在Java中这个容器让我想到了:集合(线性的、链式的)、Map、队列、数组等等。

简单思路:

那么不管用那种容器都是可以存数据了(有时候需要注意并发),那么取就是 把容器里面内容取一个并且在容器里面移除,那么还就是把 拿走的在插入到容器中即可。

我们再想想连接池还有那些:

最大、最小个数、初始大小、空闲时间、获取不到的时候需要等多久或者一直等待 等等操作。

大家是倾向自己实现呢? 还是使用现成的呢 ?

期待留言区你的回答以及大概思路……

类似http连接也是属于珍贵资源,我们也是需要使用池的,很多资源都是非常稀缺的,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,合理的用池把这些资源进行管理通常也是优化的一个重要手段。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180518G1ERNW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券