池化技术的总结
文章目录
- 1.什么是池化技术
- 2.池化技术的应用
- 一、连接池
- 二、线程池
- 三、内存池
- 3.池化技术的总结
1.什么是池化技术
池化技术指的是提前准备一些资源,在需要时可以重复使用这些预先准备的资源。
在系统开发过程中,我们经常会用到池化技术。通俗的讲,池化技术就是:把一些资源预先分配好,组织到对象池中,之后的业务使用资源从对象池中获取,使用完后放回到对象池中。即对象池对资源(线程、连接和内存)进行管理,这样做带来几个明显的好处:
1.资源重复使用, 减少了资源分配和释放过程中的系统消耗。比如,在IO密集型的服务器上,并发处理过程中的子线程或子进程的创建和销毁过程,带来的系统开销将是难以接受的。所以在业务实现上,通常把一些资源预先分配好,如线程池,数据库连接池,Redis连接池,HTTP连接池等,来减少系统消耗,提升系统性能。
2.可以对资源的整体使用做限制。这个好理解,相关资源预分配且只在预分配是生成,后续不再动态添加,从而限制了整个系统对资源的使用上限。类似一个令牌桶的功能。
3.池化技术分配对象池,通常会集中分配,这样有效避免了碎片化的问题。
2.池化技术的应用
一、连接池
连接池的原理是通过重用现有连接来减少创建新连接的开销,提高应用程序访问数据库的效率。如果使用连接池的话,每一次创建连接数据库都要经过三次握手,在使用完毕后关闭连接需要经过四次握手。这一过程大大影响系统的性能。
连接池技术通常用于数据库连接管理,它的核心思想是预先创建一定数量的数据库连接,并将这些连接保存在一个“池”中。当应用程序需要访问数据库时,它不是直接创建一个新的连接,而是从连接池中获取一个已经存在的连接。使用完毕后,这个连接不会被关闭,而是被释放回连接池,以供其他请求重复使用。
1)连接的预创建和缓存:连接池启动时,会根据配置初始化一定数量的数据库连接,并缓存在内存中。
2)连接的分配和回收:当应用程序需要数据库连接时,连接池会提供一个已经建立好的连接。应用程序使用完毕后,连接不会真正关闭,而是被归还到连接池中,以便再次使用。
3)连接的管理:连接池还会负责维护连接的健康状况,比如定期检查连接是否有效,以及在必要时创建新的连接或淘汰旧的连接。
4)资源的优化利用:由于创建新的数据库连接通常伴随着较大的系统开销(如网络通信、认证等),使用连接池可以显著减少这些开销,因为连接可以被多个请求重复使用。
5)性能的提升:连接池减少了频繁建立和关闭连接的操作,从而降低了延迟,提高了应用程序的整体性能。
6)并发的支持:连接池通常设计为线程安全的,能够支持多线程或多进程环境下的并发访问。
7)灵活性和可配置性:连接池的大小(即同时保持的最大连接数)通常是可配置的,可以根据应用程序的需求和数据库的性能来调整。
注意:在后端开发中,在循环内连接数据库的大大影响数据库性能的,即使有足够的连接数,依然有可能耗尽连接数。比如在循环语句中进行数据的增删改查操作。
二、线程池
本文将以java中的线程池为例,详细介绍线程池的概念和工作原理,以及参数设置。以及开发注意事项。
利用池化技术思想来管理和复用线程,以提高多任务处理的效率和性能。
线程池是一种资源池,它的目的是优化和管理线程的使用,避免因为频繁创建和销毁线程而导致的资源浪费和性能开销。
关键执行步骤:
1).当任务来了之后,判断线程池中实际线程数是否小于核心线程数,如果小于就直接创建线程并执行任务。
2).当实际线程数大于核心线程数,它会判断任务队列是否已满,如果未满直接将任务存放队列即可。
3).判断线程池的实际线程数是否大于最大线程数,如果小于最大线程数直接创建线程执行任务;实际线程数已经等于最大线程数,那么会直接执行拒绝策略。

开发中的注意事项:
在开发中请要使用显性定义一个线程,也不要在开发使用java中juc包中的方法创建线程,必须使用线程池。SpringBoot定义线程池代码如下:
```@Configuration
public class ExecutorConfig {private int corePoolSize = 5;private int maxPoolSize = 50;@Beanpublic Executor workAsync() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();//配置核心线程数executor.setCorePoolSize(corePoolSize);//配置最大线程数executor.setMaxPoolSize(maxPoolSize);//配置队列大小int queueCapacity = 2000;executor.setQueueCapacity(queueCapacity);//配置线程池中的线程的名称前缀executor.setThreadNamePrefix("workAsync-");//rejection-policy:当pool已经达到max size的时候,如何处理新任务CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());executor.initialize();return executor;}}
使用线程时,在方法上添加注解即可声明某方法为异步,即使用线程池:
@Async("workAsync")
三、内存池
内存池的原理主要是通过预先分配一定量的内存,来减少程序运行时申请和释放内存的开销,从而提高整体性能。
内存池技术的核心在于它能够有效地管理内存资源。具体来说,内存池的原理包括以下几个方面:
1)、减少内存管理的开销:内存池通过一次性申请一大块内存,减少了频繁向操作系统申请和释放内存的开销,这在程序需要大量小块内存时尤其有效。
2)、防止内存碎片:内存池通常分配固定大小的内存块,这样可以避免因频繁的内存分配和释放导致的内存碎片问题,内存碎片会导致内存利用率降低,影响程序性能。
3)、提高程序性能:内存池提供了一种高效的内存分配方式,尤其是对于频繁进行内存分配的程序,使用内存池可以明显提升运行效率。
4)、自定义内存管理机制:内存池允许开发者在给定的内存缓冲区上建立自己的内存管理机制,根据程序的具体需求来分配和释放内存,这可以进一步减少内存管理的开销。
3.池化技术的总结
池化技术是一种资源管理优化策略,用于提高应用程序的性能和响应能力。它通过重用那些创建、初始化或销毁成本较高的资源来实现这一目的。
相关文章:
池化技术的总结
文章目录 1.什么是池化技术2.池化技术的应用一、连接池二、线程池三、内存池 3.池化技术的总结 1.什么是池化技术 池化技术指的是提前准备一些资源,在需要时可以重复使用这些预先准备的资源。 在系统开发过程中,我们经常会用到池化技术。通俗的讲&am…...
H5简约星空旋转引导页源码
H5简约星空旋转引导页源码 源码介绍:一款带有星空旋转背景特效的源码,带有四个按钮 下载地址: https://www.changyouzuhao.cn/11655.html...
前端学习之路(4) vue2和vue3的区别
一. 根节点不同 vue2中必须要有根标签vue3中可以没有根标签,会默认将多个根标签包裹在一个fragement虚拟标签中,有利于减少内存。 二. 组合式API和选项式API 在vue2中采用选项式API,将数据和函数集中起来处理,将功能点切割了当…...
网络原理-TCP/IP(5)
TCP协议 延迟应答 它也是基于滑动窗口,提高效率的一种机制,结合滑动窗口以及流量控制,能够以延迟应答ACK的方式,把反馈的窗口,搞大.核心在于允许范围内,让窗口尽可能大. 如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小. 1.假设接收端缓冲区为1M.一次收到了5…...
Docker 常用命令详细介绍
Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker 使用概率最高的命令…...
10G PON演进到50G PON
10G-PON是万兆无源光网络,光纤链路传输速率能够达到10Gbps。根据ZTE的报告称,截至2023年6月,全球10G PON出货量已超过3000万个PON端口,其中中国市场份额约占80%。 10G PON在中国市场的广泛部署,显着推进了10G PON产业链…...
智能指针——浅析
智能指针 本人不才,只能将智能指针介绍一下,无法结合线程进行深入探索 介绍及作用 在异常产生进行跳转时,通过栈帧回收进行内存释放,防止内存泄漏 基于RAII思想可以创建出只能指针 RAII(Resource Acquisition Is Initializatio…...
JAVA后端上传图片至企微临时素材
1.使用场景 在使用企业微信API接口中,往往开发者需要使用自定义的资源,比如发送本地图片消息,设置通讯录自定义头像等。 为了实现同一资源文件,一次上传可以多次使用,这里提供了素材管理接口:以media_id来…...
MySQL-----初识
一 SQL的基本概述 基本概述 ▶SQL全称: Structured Query Language,是结构化查询语言,用于访问和处理数据库的标准的计算机语言。SQL语言1974年由Boyce和Chamberlin提出,并首先在IBM公司研制的关系数据库系统SystemR上实现。 ▶美国国家标…...
[基础IO]文件描述符{重定向/perror/磁盘结构/inode/软硬链接}
文章目录 1. 再识重定向2.浅谈perror()3.初始文件系统4.软硬链接 1. 再识重定向 图解./sf > file.txt 2>&1 1中内容拷贝给2 使得2指向file 再学一个 把file的内容传给cat cat拿到后再给file2 2.浅谈perror() open()接口调用失败返回-1,并且错误码errno被适当的设置,…...
NAS系统折腾记 – Emby搭建家庭多媒体服务器
Emby简介 Emby是一款优秀的媒体服务器软件,致力于为用户提供丰富的多媒体体验。通过Emby,您可以方便地在家庭内的各种设备上观看您喜爱的电影、电视剧和其他视频内容。而且,Emby还具备强大的媒体管理功能,让您的影视资源井然有序…...
#从零开始# 在深度学习环境中,如何用 pycharm配置使用 pipenv 虚拟环境
为Python项目创建虚拟环境 在深度学习环境和一般python环境中安装pipenv基本一致,只需要确认好pipenv指定的python版本即可,安装pipenv前,可以通过python --version来确认安装版本 快捷键:crtl alt S 查看interpreter,查看所有…...
Cmake编译Opencv3.3.1遇到有些文件无法下载的错误解决:
前言: 对于,opencv有些配置文件错误并未致命,所以,有错误也不影响后续的编译:但是,后引用如果要用,在回过头来还是要解决的。 问题表述: 比如,有些文件下载的错误&am…...
Python基础知识:Python序列以及序列的索引、切片、相乘和相加
索引 索引就是序列中的每个元素所在的位置,可以通过从左往右的正数索引,也可以通过从右往左的负数索引。 从左往右的正数索引:在python序列中,第一个元素的索引值为0,第二个元素的索引值为1,以此类推&…...
回归预测 | Matlab实现CPO-GRU【24年新算法】冠豪猪优化门控循环单元多变量回归预测
回归预测 | Matlab实现CPO-GRU【24年新算法】冠豪猪优化门控循环单元多变量回归预测 目录 回归预测 | Matlab实现CPO-GRU【24年新算法】冠豪猪优化门控循环单元多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-GRU【24年新算法】冠豪猪优化…...
开源项目TARZAN-NAV | 基于springboot的现代化导航网站系统
TARZAN-NAV 导航网站 一个基于 Spring Boot、MyBatis-Plus、h2database、ehcache、Docker、websocket等技术栈实现的导航网站系统,采用主流的互联网技术架构、全新的UI设计、支持一键源码部署,拥有完整的仪表板、导航管理,用户管理、评论管理…...
SQL查询数据之多表(关联)查询
数据表: 关联查询主要分为:(inner join)交叉关联、(left join)左关联、(right join)右关联 (inner join)交叉关联: 定义:࿰…...
常见的web前端开发框架介绍
Web前端开发框架是为了简化网页设计和开发的流程而创建的工具集。它们提供了预定义的组件、工具和库,帮助开发者快速构建交互式的用户界面。以下是一些常见的Web前端开发框架,以及它们的原理、基础技术和应用场景的介绍: 1. React **…...
CSS 选择器与相关规则详解
CSS(Cascading Style Sheets)的选择器是网页样式设计中至关重要的工具,它们允许开发者精确地定位并应用样式到HTML文档中的元素。下面将逐一介绍几种主要的选择器类型,以及相关的注释和规则。 1. 类选择器 (Class Selector) 类选…...
基于springboot的宠物店系统的设计与实现
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
