以数据库为例,系统在和数据库进行交互之前,数据库驱动会帮助我们建立好连接。之后我们只需要发送SQL语句就可以执行对应的数据库操作了。
但如果系统不是一个人在使用,存在多个请求同时去争抢连接的情况。这时候如果并发处理多个请求,会导致多个请求去建立多个连接,并且使用完后再去关闭。这会导致不必要的资源浪费和性能下降。
这说明在多线程请求的时候频繁创建和销毁连接是不合理的。但如果我们可以提供一些固定的用来连接的线程,这样就不需要反复的创建和销毁连接了。而这就是数据库连接池。
数据库连接池:维护一定的连接数,方便系统获取连接,使用时去池子中获取,用完放回去就可以。我们不需要关系连接的创建和销毁,也不需要关心线程池是怎么维护这些连接的。
常见的Druid、C3P0、DBCP,这些连接池大大节省了不断创建于销毁线程的开销。
扩展到操作系统线程池和HTTP连接池,这就是「池化」思想。
常见的「池化」应用实例有:
- 内存池
- 连接池
- 实例池
- 线程池
「池化」思想可以带来效率的提升、降低资源的消耗、提升资源的可管理性。