当前位置: 首页 > news >正文

池化技术的总结

文章目录

    • 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)交叉关联: 定义:&#xff0…...

常见的web前端开发框架介绍

Web前端开发框架是为了简化网页设计和开发的流程而创建的工具集。它们提供了预定义的组件、工具和库,帮助开发者快速构建交互式的用户界面。以下是一些常见的Web前端开发框架,以及它们的原理、基础技术和应用场景的介绍: 1. React **…...

CSS 选择器与相关规则详解

CSS(Cascading Style Sheets)的选择器是网页样式设计中至关重要的工具,它们允许开发者精确地定位并应用样式到HTML文档中的元素。下面将逐一介绍几种主要的选择器类型,以及相关的注释和规则。 1. 类选择器 (Class Selector) 类选…...

基于springboot的宠物店系统的设计与实现

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…...

论文阅读:CLIP:Learning Transferable Visual Models From Natural Language Supervision

从自然语言监督中学习可迁移的视觉模型 虽然有点data/gpu is all you need的味道,但是整体实验和谈论丰富度上还是很多的,也是一篇让我多次想放弃的文章,因为真的是非常长的原文和超级多的实验讨论,隔着屏幕感受到了实验的工作量之…...

JavaScript极致性能优化全攻略

JavaScript性能优化深度指南 1 引言 JavaScript性能优化在现代Web开发中至关重要。随着Web应用日益复杂,性能直接影响用户体验、搜索引擎排名和业务转化率。研究表明,页面加载时间每增加1秒,转化率下降7%,跳出率增加32%。通过优化JavaScript性能,开发者可以: 提升用户满…...

Flowith,有一种Agent叫无限

大家好,我是羊仔,专注AI工具、智能体、编程。 今天羊仔要和大家聊聊一个最近发现的超级实用的Agent平台,名字叫Flowith。 这篇文章会带你从零了解到实战体验,搞清楚Flowith是如何让工作效率飙升好几倍,甚至重新定义未…...

网络安全方向在校生有哪些证书适合考取?

工作7年得出结论:网络安全,考任何证书都没有用,实力才是根本。我是2021年考的 CISSP,报了培训班,花了1万一千块钱,签的保障班还是服务班不记得了,大概意思就是你放心去考,考不过可以…...

Kali Linux从入门到实战:系统详解与工具指南

一、Kali Linux简介 Kali Linux是一款基于Debian的Linux发行版,专为渗透测试和网络安全审计设计,由Offensive Security团队维护。其前身是BackTrack,目前集成了超过600款安全工具,覆盖渗透测试全流程,是网络安全领域…...

NodeMediaEdge快速上手

NodeMediaEdge快速上手 简介 NodeMediaEdge是一款部署在监控摄像机网络前端中,拉取Onvif或者rtsp/rtmp/http视频流并使用rtmp/kmp推送到公网流媒体服务器的工具。 通过云平台协议注册到NodeMediaServer后,可以同NodeMediaServer结合使用。使用图形化的…...

零基础认知企业级数据分析平台如何落实数据建模(GAI)

理解数据建模的基本概念 数据建模是将业务需求转化为数据结构和关系的过程,核心目标是构建可支撑分析、预测或决策的数据模型。零基础需从以下维度入手: 业务理解:明确业务问题(如销售预测、用户分群),与…...

【Net】TCP粘包与半包

文章目录 TCP粘包与半包1 背景2 粘包(packet stick)3 半包(packet split)4 为什么会出现粘包/半包?5 如何解决?6 示例7 总结 TCP粘包与半包 在网络编程中,粘包和半包问题是常见的 TCP 协议特有…...

JVM 核心组件深度解析:堆、方法区、执行引擎与本地方法接口

一、JVM 堆内存:对象的生存与消亡之地 作为 Java 虚拟机中最大的内存区域,堆内存是所有对象实例的 “出生地” 与 “安息所”。从程序运行的角度看,所有通过new关键字创建的对象都在堆中分配内存,其生命周期完全由垃圾回收机制&am…...

PyTorch——DataLoader的使用

batch_size, drop_last 的用法 shuffle shuffleTrue 各批次训练的图像不一样 shuffleFalse 在第156step顺序一致...