池化技术-线程池、连接池、内存池等

279 阅读2分钟

我的公众号:

image.png

在软件开发当中,我们会经常遇到池的概念,比如线程池、连接池等,这些都是为了提高性能或者节省资源等。

图片   、线程池

为了提高性能,我们通常会用到多线程技术,但是在线程的创建和销毁过程中,是非常消耗资源、时间、性能的,为了解决这个问题,所以,我们就提出了线程池的概念。

线程池:Java中开辟出了一种管理线程的概念,这个概念叫做线程池,从概念以及应用场景中,我们可以看出,线程池的好处,就是可以方便的管理线程,也可以减少内存的消耗。

进程池与线程池同理。

图片 二、连接池****

说起连接池,我们提的比较多的是数据库连接池,通常很多的官网或者案例讲解,都是小的demo,他们连接数据库大多写的都是创建连接、用完后立即断开连接等,但在大量请求的时候,我们就要频繁创建和销毁多个连接。

而数据库连接是一种关键的、有限的、昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。

当然,其实连接池,还有消息队列连接池、Redis连接池,基本只要有设计到中间件的连接,其实很多都可以有连接池。

图片 三、内存池

(Memory Pool)是一种内存分配方式,又被称为固定大小区块规划(fixed-size-blocks allocation)。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。

内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是,使得内存分配效率得到提升。