【池化技术】池化技术基础和原理

2023-05-16

文章目录

    • 一、概念
    • 二、应用
      • 1. 线程池
      • 2. 连接池
      • 3.内存池
    • 三、实例

一、概念

池化技术指的是提前准备一些资源,在需要时可以重复使用这些预先准备的资源。

在系统开发过程中,我们经常会用到池化技术。通俗的讲,池化技术就是:把一些资源预先分配好,组织到对象池中,之后的业务使用资源从对象池中获取,使用完后放回到对象池中。这样做带来几个明显的好处:

  1. 资源重复使用, 减少了资源分配和释放过程中的系统消耗。比如,在IO密集型的服务器上,并发处理过程中的子线程或子进程的创建和销毁过程,带来的系统开销将是难以接受的。所以在业务实现上,通常把一些资源预先分配好,如线程池,数据库连接池,Redis连接池,HTTP连接池等,来减少系统消耗,提升系统性能。

  2. 可以对资源的整体使用做限制。这个好理解,相关资源预分配且只在预分配是生成,后续不再动态添加,从而限制了整个系统对资源的使用上限。类似一个令牌桶的功能。

  3. 池化技术分配对象池,通常会集中分配,这样有效避免了碎片化的问题。

池化技术简单点来说,就是提前保存大量的资源,以备不时之需。池化技术有两个特点,提前创建和重复利用。

二、应用

1. 线程池

线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程:先启动若干数量的线程,并让这些线程都处于睡眠状态,当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态。

为什么要预先创建若干线程,而不是在需要的时候再创建?

因为在数据量很大的条件下,某一时刻可能有大量的(上百个)并发请求,而线程创建的过程是比较耗时的,若此时对每个请求都新创建一个线程,那么会耗费大量的时间,造成拥塞。

2. 连接池

常见的数据库oracle、SQL server都有连接池技术,数据库连接池是在数据库启动时建立足够的数据库连接,并将这些连接组成一个连接池(简单说:在一个“池”里放了好多半成品的数据库联接对象),由应用程序动态地对池中的连接进行申请、使用和释放。对于多于连接池数据库连接数的并发请求,则在请求队列中排队等待。并且应用程序可以根据池中连接的使用率,动态增加或减少池中的连接数,这个增加减少由数据库连接池管理线程进行操作。

为什么要创建连接池?

因为需要连接数据库时再创建连接,然后用完就释放的方式会造成很多重复的数据库连接释放操作,且容易因为忘记释放而长期占用链接资源的缺陷。而用数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

3.内存池

内存池是一种内存分配方式。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。

一个解决方法是内存池:在启动的时候,一个内存池(Memory Pool)分配一块很大的内存,并将会将这个大块分成较小的块。每次你从内存池申请内存空间时,它会从先前已经分配的块中得到,而不是从操作系统。最大的优势在于:

  1. 非常少(几没有) 堆碎片;

  2. 比通常的内存申请/释放(比如通过malloc, new等)的方式快。

三、实例

下面是内存池详解:【池化技术】内存池技术原理和C语言实现

下面是线程池详解:【池化技术】线程池技术原理和C语言实现

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【池化技术】池化技术基础和原理 的相关文章

随机推荐

  • Redis数据结构2

    继续放一下小林coding的文章 xff1a 为了拿捏 Redis 数据结构 xff0c 我画了 40 张图 xff08 完整版 xff09
  • Redis博客、教程学习资料汇总(持续更新)

    在这篇博客中 xff0c 总结一下写过的博客和一些好的学习资料 博客 xff1a Redis基础 xff0c Linux下安装Redis和hredis xff0c C 43 43 调用Redis xff0c Redis中字符串设计 Redi
  • memcached在linux上的安装,C/C++调用memcached,memcached与Redis的区别

    文章目录 一 memcached在linux上的安装安装 Memcached自动安装源代码安装 Memcached 运行 xff08 1 xff09 作为前台程序运行 xff1a xff08 2 xff09 作为后台服务程序运行 xff1a
  • 【C/C++服务器开发】事件驱动、事件驱动架构、事件驱动编程及设计模式

    文章目录 一 事件驱动二 事件驱动编程事件驱动和异步IO看图说话讲事件驱动模型 三 C C 43 43 实现事件驱动四 常用的C C 43 43 事件驱动库 一 事件驱动 首先我们来看看百度百科的介绍 所谓事件驱动 xff0c 简单地说就是
  • VxWorks消息队列详解

    文章目录 一 前言二 VxWorks消息队列模块详解三 代码实例 一 前言 最近看了点事件驱动编程 了解到在时间驱动编程中 xff0c 重要的是一个事件收集器 一个事件发送器和一个事件处理器 这让我联想到VxWorks中的消息队列 xff0
  • VxWorks/tornado中怎么调试及WindSh常用命令行详解

    一 调试 VxWorks5 5 tornado2 2作为一款极为远古的嵌入式实时操作系统和IDE xff0c 软件的界面和功能都是极为原始的 在这种情况下 xff0c 如果我们要对软件进行调试该怎么操作呢 xff1f tornado调试分为
  • 如何长期输出优质内容?我是如何做到的?

    分享一篇站长的文章 xff1a 如何长期输出优质内容 xff1f 我是如何做到的 xff1f 创业 7 年时间里 xff0c 我一直在运营C语言中文网 xff0c 创作和参与了 40 多套编程教材 xff0c 累计阅读人次超过 2000 万
  • Dev C++调试程序方法详解

    分享一篇站长的关于调试的文章 xff1a Dev C 43 43 调试程序方法详解 Dev C 43 43 算是兼容性很好使用很方便的IDE了 xff0c 记录一下调试方法 xff0c 以备不时之需 所谓调试程序 xff0c 就是控制编译器
  • 为什么看到这么多人不推荐C++?

    转一个回答 链接 xff1a https www zhihu com question 22853451 answer 2084675682 其实现在也越来越发现 xff0c C 43 43 老是在弄那些语言特性 xff0c 当然有一些好用
  • 模型部署之NVIDIA AGX Xavier 配置和使用Torch,ONNX,TensorRT做模型推理

    Do not blindly trust anything I say try to make your own judgement 目录 1 安装CUDA cudnn tensorrt 2 配置Torch 3 配置ONNX 4 配置Ten
  • 什么是包管理器,C++ 有没有像 pip、npm、gem 一样的包管理工具?

    文章目录 一 包管理器什么是包 xff1f RPM包管理器dpkg包管理器二 C 43 43 有没有像 pip npm gem 一样的包管理工具 xff1f 三 C 43 43 包管理器有哪些1 Conan https github com
  • 二进制文件和库之间有什么区别?

    问题 我正在尝试了解文件系统层次结构标准 我已经查找了二进制文件和库 xff0c 并且据我目前的理解 xff1a 二进制文件是二进制格式的计算机可读代码文件 xff0c 它们直接用位控制CPU和处理器 为了方便起见 xff0c 库是可由各种
  • 如何用OneNote、Typora、Notion构建知识体系?

    我其实用OneNote和typora已经很久了 xff0c 因此很想来说说我使用这两款软件的方法和感想 xff0c 再加上最近听说Typora正式版要开始收费了 xff08 14 99 xff09 xff0c 还有一个国外很火的笔记Noti
  • 【程序员学理财】为什么要开这个专栏?

    李嘉诚有一句名言 xff1a 30岁以前人要靠体力 智力赚钱 xff0c 30岁之后要靠钱赚钱 要靠打工实现财富自由几乎是不可能的事 xff0c 靠钱赚钱 xff0c 是实现财富快速积累的唯一方式 当然要靠钱赚钱 xff0c 也是需要原始积
  • 【程序员读论文】为什么要读论文?

    一 标题 标题虽然说是读论文 xff0c 但其实不是很准确 xff0c 而是读以论文为代表的具有高密度知识的内容 xff0c 包括论文 xff08 硕博毕业论文 xff0c 期刊会议论文 xff09 xff0c 书籍 xff08 全面但知识
  • 【程序员学英语】翻译编程帮助手册和英文问答

    虽然PHP是最好的语言 xff0c 但是英语才是每个程序员都应该熟练掌握的语言 学习一门语言包括听 说 读 写 xff0c 对于每个在国内的程序员来说 xff0c 掌握基本的读 写是最基本的要求 因此这个专栏大概会专注于翻译帮助手册和英文问
  • ARINC429总线基础

    再来一份 xff0c 相互补充
  • 【池化技术】内存池技术原理和C语言实现

    文章目录 一 基础概念1 一个可执行程序占用的内存分为哪几个区 xff1f 一个进程的虚拟内存区域有哪些 xff1f 2 静态内存分配和动态内存分配 二 malloc实现原理malloc内存分配 xff08 下面算是正常一般的情况了 xff
  • 【池化技术】线程池技术原理和C语言实现

    文章目录 一 基础概念进程和线程多进程和多线程区别 二 线程池技术 一 基础概念 在讲线程池技术之前 xff0c 我们先对操作系统中的一些基础概念 xff0c 比如进程 线程 线程的创建与销毁等进行说明 进程和线程 进程 一个在内存中运行的
  • 【池化技术】池化技术基础和原理

    文章目录 一 概念二 应用1 线程池2 连接池3 内存池 三 实例 一 概念 池化技术指的是提前准备一些资源 xff0c 在需要时可以重复使用这些预先准备的资源 在系统开发过程中 xff0c 我们经常会用到池化技术 通俗的讲 xff0c 池