池化技术介绍

简介

         提前保存大量的资源,以备不时之需以及重复使用。池化技术应用广泛,如内存池,线程池,连接池等等。内存池相关的内容,建议看看 Apache、Nginx 等开源 web 服务器的内存池实现。

        由于在实际应用当做,分配内存、创建进程、线程都会设计到一些系统调用,系统调用需要导致程序从用户态切换到内核态,是非常耗时的操作。因此,当程序中需要频繁的进行内存申请释放,进程、线程创建销毁等操作时,通常会使用内存池、进程池、线程池技术来提升程序的性能。

        对连接或线程的复用,并对复用的数量、时间等进行控制,从而使得系统的性能和资源消耗达到最优状态。

线程池

线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程如下:先启动若干数量的线程,并让这些线程都处于睡眠状态,当需要一个开辟一个线程去做具体的工作时,就会唤醒线程池中的某一个睡眠线程,让它去做具体工作,当工作完成后,线程又处于睡眠状态,而不是将线程销毁。

连接池

  1. 数据库连接池

    数据库连接池的基本思想是在系统初始化的时候将数据库连接作为对象存储在内存中,当用户需要访问数据库的时候,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。在使用完毕后,用户也不是将连接关闭,而是将连接放回到连接池中,以供下一个请求访问使用。这些连接的建立、断开都由连接池自身来管理。

    同时,还可以设置连接池的参数来控制连接池中的初始连接数、连接的上下限数和每个连接的最大使用次数、最大空闲时间等。当然,也可以通过连接池自身的管理机制来监视连接的数量、使用情况等。

  2. HttpClient 连接池

    HttpClient 我们经常用来进行 HTTP 服务访问。我们的项目中会有一个获取任务执行状态的功能使用 HttpClient,一秒钟请求一次,经常会出现 Conection Reset 异常。经过分析发现,问题是出在 HttpClient 的每次请求都会新建一个连接,当创建连接的频率比关闭连接的频率大的时候,就会导致系统中产生大量处于 TIME_CLOSED 状态的连接。这个时候使用连接池复用连接就能解决这个问题。

参考文档:

【池化技术】线程池技术原理和C语言实现_c语言多线程池化_小熊coder的博客-CSDN博客

【池化技术】池化技术基础和原理_小熊coder的博客-CSDN博客 

池化技术与线程池的简单实现-khls27-ChinaUnix博客 

Java池化技术_梦远星帆的博客-CSDN博客 

什么是池化技术-蒲公英云

C语言实现线程池功能 - 掘金

线程池原理及C语言实现线程池_c线程池_青城山小和尚的博客-CSDN博客

C语言实现线程池 - 简书

C语言实现线程池技术 - 知乎 

你可能感兴趣的:(线程,Java,机器学习,人工智能)