(面试经典问题之连接池篇)连接池构成、作用及其基本原理详解

news/2025/2/24 21:21:25

一、什么是连接池

连接池一般指的是数据库连接池(connection pooling),是指程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态的对池中的连接进行申请,使用,释放(跟前面文章提到线程池、内存池的概念很像,因为他们都是属于池式结构)。

二、为什么需要数据库连接池

维持管理固定数量的连接,复用连接资源(只要是池式结构,其主要功能就是复用资源):

1、维持与数据库的TCP连接(长连接,而非短连接)(ps:本文的数据库均已MySQL举例);

2、复用连接资源,可复用同一条连接多次执行sql语句,避免了频繁建立和断开tcp连接所需要的资源和时间开销(三次握手建立TCP连接,四次挥手断开TCP连接,读者可以自行回顾一下,看看是否还记得);

3、统一的连接管理,避免数据库连接泄漏;

三、连接池的运行机理

连接池又分为同步连接池和异步连接池,以下将分开进行原理讲解:

同步连接池:

结构如图所示:

工作流程为:用户线程从线程池中获取可用连接(即未被锁定的连接),并同步等待连接的返回(即阻塞当前线程或者当前协程等待返回)。

连接池中的连接数量表示当前最多允许几个用户线程或协程并发使用连接。

应用:服务端启动时,初始化资源需要使用同步连接池。

异步连接池:

结构如图所示:连接池中的连接和线程池中的线程一一对应(即一个线程分配一个连接,是线程池和连接池的共同作用下形成了异步连接池)

工作流程为:用户线程发布任务并将其push进执行任务队列,异步连接池中的线程从队列中取出任务进行消费,消费完成后通过异步回调来通知用户线程获取返回结果。

连接池中的连接数量表示当前允许几个连接同时执行sql语句。(与同步连接池不同,连接数量不代表最多允许几个用户线程或协程并发使用连接,可以是无穷多个用户同时往任务队列里push任务)

应用:服务器启动后的业务处理,一些高并发的业务场景。

四、一些学习中产生的问题及思考

同步连接池性能高还是异步性能高?

按照经验而言,异步往往是性能更高的一方,当然,这个问题中答案也是如此。但是,回答这个问题我们首先要明确主语,即这个性能指的是连接池的性能还是用户线程的性能,性能的直观体现是什么?在此处,性能我们一般默认指用户线程的性能,性能的直观表现就是我用户线程需不需要阻塞等待耗时任务完成,显然,同步连接池就是阻塞线程等待的底层逻辑,而异步线程池则是push任务后直接返回,因此异步的性能更高。

为什么服务端启动时,初始化资源需要使用同步连接池?

上面讲到异步性能更高,但为什么该场景下需要使用同步连接池?原因在于:同步的方案,只有等到任务完成才返回,因此对于用户线程而言,可以明确的知道我的初始化工作是否全部完成,但是异步的方案什么时候返回结果是未知的,而初始化需要确保所有资源、任务都完成,固选用同步连接池。


http://www.niftyadmin.cn/n/5864811.html

相关文章

《离线唤醒+离线Vosk识别+DeepSeek+离线合成,你的第二大脑》

在快节奏的现代生活中,我们渴望一种能随时随地助力的智慧伙伴。现在,一款融合离线听写、唤醒功能、大模型上下文携带以及合成技术的智能工具横空出世,宛如成为你的第二大脑。 离线听写功能,让你摆脱网络束缚。无论是在静谧的图书…

ip归属地和手机卡有关系吗?详细探析

在数字化浪潮席卷全球的今天,互联网已成为连接世界的桥梁。IP地址,作为网络世界中每个设备的“身份证”,承载着设备的位置信息和通信功能。而手机卡,则是我们移动设备接入互联网的钥匙,它让随时随地的在线交流成为可能…

Ubuntu中部署deepseek

deepseek-r1:1.5b版本可以在CPU上运行 1.安装ollama 1.1更新系统包 sudo apt update sudo apt upgrade -y1.2 安装依赖 sudo apt install -y curl git1.3 下载并安装 Ollama Ollama 通常通过脚本安装。你可以使用以下命令下载并运行安装脚本: curl -fsSL http…

iStatistica Pro for Mac v7.0 系统监控工具 支持M、Intel芯片

iStatistica Pro 应用介绍 iStatistica Pro v7.0 是一款 macOS 上的系统监控工具,专为帮助用户实时监控和分析电脑性能而设计。它提供了一个简洁、直观的界面,让用户轻松查看他们的 Mac 的各类硬件和软件状态。iStatistica Pro 让你随时了解 CPU、内存、…

go 查看版本

个人学习笔记 1. 打开终端(或命令提示符) 在 Windows 上,使用 cmd 或 PowerShell。在 macOS 或 Linux 上,使用终端应用程序。 2. 运行以下命令 go version 3. 查看输出 命令执行后,终端会显示已安装的 Go 版本&…

DevEco Studio常用快捷键以及如何跟AndroidStudio的保持同步

DevEco Studio快捷键 DevEco Studio是华为推出的用于开发HarmonyOS应用的集成开发环境,它提供了丰富的快捷键以提高开发效率,以下为你详细介绍不同操作场景下的常用快捷键: 通用操作快捷键 操作描述Windows/Linux 快捷键Mac 快捷键打开设置窗…

kafka基本知识

什么是 Kafka? Apache Kafka 是一个开源的分布式流处理平台,最初由 LinkedIn 开发,后来成为 Apache 软件基金会的一部分。Kafka 主要用于构建实时数据管道和流处理应用程序。它能够高效地处理大量的数据流,广泛应用于日志收集、数…

AI 在未来相机领域的应用前景如何?

和你一起终身学习,这里是程序员Android 人工智能(AI)在手机相机领域的应用已成为近年来技术创新的核心驱动力之一。随着计算摄影、深度学习算法和硬件加速技术的进步,AI正在重新定义手机摄影的可能性,并为未来带来更多…