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

news/2025/2/27 4:55:39/

一、什么是连接池

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

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

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

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

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

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

三、连接池的运行机理

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

同步连接池:

结构如图所示:

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

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

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

异步连接池:

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

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

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

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

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

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

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

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

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


http://www.ppmy.cn/news/1575177.html

相关文章

STM32MP157A单片机移植Linux驱动深入版

需求整理 在Linux设备树中新增leds节点&#xff0c;其有3个gpio属性&#xff0c;分别表示PE10对应led1&#xff0c;PF10对应led2&#xff0c;PE8对应led3&#xff0c;设备树键值对如下&#xff1a; leds { led1-gpio <&gpioe 10 0>; led2-gpio &l…

lua-游戏红点提示系统抽象设计

文章目录 前言一、定义红点节点类型二、节点注册与管理三、状态更新与冒泡机制 四、示例配置与使用五、结构示意图六、关键机制说明总结 前言 在游戏开发中&#xff0c;红点提示系统可以通过树形结构和策略模式进行抽象&#xff0c;实现高扩展性。以下是基于Lua的实现方案&…

R 语言科研绘图第 27 期 --- 密度图-分组

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

【论文精读】VLM-AD:通过视觉-语言模型监督实现端到端自动驾驶

论文地址&#xff1a; VLM-AD: End-to-End Autonomous Driving through Vision-Language Model Supervision 摘要 人类驾驶员依赖常识推理来应对复杂多变的真实世界驾驶场景。现有的端到端&#xff08;E2E&#xff09;自动驾驶&#xff08;AD&#xff09;模型通常被优化以模仿…

Nmap网络安全审计

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Nmap网络安全审计 什么是Nmap Nmap是由Gordon Lyon设计并实现的&#xff0c;于1997开始发布。最初设计Nmap的目的只是希望打造一款强大的端口扫描工具。但是随着…

【Http和Https区别】

概念&#xff1a; 一、Http协议 HTTP&#xff08;超文本传输协议&#xff09;是一种用于传输超媒体文档&#xff08;如HTML&#xff09;的应用层协议&#xff0c;主要用于Web浏览器和服务器之间的通信。http也是客户端和服务器之间请求与响应的标准协议&#xff0c;客户端通常…

Git版本控制系统---本地操作(万字详解!)

目录 git基本配置 认识工作区、暂存区、版本库 添加文件--情况一&#xff1a; 添加文件-情况二: 修改文件: 版本回退&#xff1a; git基本配置 1.初始化本地仓库&#xff0c;注意&#xff1a;一定要在一个目录下进行&#xff0c;一般都是新建一个文件夹&#xff0c;在文件…

斐波那契数列模型:在动态规划的丝绸之路上追寻斐波那契的足迹(上)

文章目录 引言递归与动态规划的对比递归解法的初探动态规划的优雅与高效自顶向下的记忆化搜索自底向上的迭代法 性能分析与比较小结 引言 斐波那契数列&#xff0c;这一数列如同一条无形的丝线&#xff0c;穿越千年时光&#xff0c;悄然延续其魅力。其定义简单而优美&#xff…