Java线程池与数据库连接池区别

来源:互联网 发布:成都php培训费用要多少 编辑:程序博客网 时间:2024/06/06 05:44

线程池与数据库连接池的区别

看到了MyCat参数设置时注意到了连接池的设置,突然发现好几个池化的概念,就顺手搜了一下,这里附上原文链接

线程池

其实线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程如下:先启动若干数量的线程,并让这些线程都处于睡眠状态,当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态。

当然为每一个请求单独的创建线程是很方便的,但是并发量很大时,如果为每一个请求都创建新的线程,那么耗费CPU时间和内存是很惊人的,同时反复创建、销毁线程带来的结果将是一场灾难

连接池

数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。 一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性能低下。 数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并讲这些连接组成一个连接池(简单说:在一个“池”里放了好多半成品的数据库联接对象),由应用程序动态地对池中的连接进行申请、使用和释放。对于多于连接池中连接数的并发请求,应该在请求队列中排队等待。并且应用程序可以根据池中连接的使用率,动态增加或减少池中的连接数。
连接池技术尽可能多地重用了消耗内存地资源,大大节省了内存,提高了服务器地服务效率,能够支持更多的客户服务。通过使用连接池,将大大提高程序运行效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。
1) 最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;
2) 最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。

注意到还有一个概念是空闲连接,说的就是长连接时,有一个最大保持时间,目的是在达到一定时间不工作后对资源进行的回收

以我看来

记得还有一个博客提到了对象池的概念,ta理解的数据路连接池就是保存了很多数据库连接对象的对象池。

我也觉得有道理,其实说白了,池化(缓冲)的作用就是在系统初始化时预先准备好资源,有请求时分配对象去使用,空闲时就进行回收但不销毁;这样做的目的是减少了对象反复创建、销毁所花费的时间,这在并发量很大的情况下是很吃资源的

原创粉丝点击