C++中的三大池:线程池,内存池,数据库连接池

C++中有三大池,即我们常说的:线程池,内存池,数据库连接池。

一.线程池

多线程同时访问共享资源造成数据混乱的原因就是因为CPU的上下文切换导致,线程池就是为了解决此问题而生。
多线程常用的有:std::thread、Boost.Thread库,以及Qt提供线程池类QThread。
线程池的结构,手写线程池设计思路:
1.设计任务的结构体,及任务队列,存储需要处理的任务,后面由工作的线程来处理这些任务:
设计一个任务结构体struct或者class;
设计基于管理任务的队列queue的类,包含添加任务,删除任务,取出任务;
2.设计工作的线程(任务队列任务的消费者),N个:
线程池维护一定数量的工作现场,以不停的取出任务并处理
工作的线程充当任务的消费者角色
任务队列为空时,工作的线程将被阻塞
有了新任务时,生产者将解出阻塞,让工作线程开始工作;
3.管理者线程(不处理任务队列中的任务),1个:
管理者线程主要检测任务队列中的任务数量和处于繁忙状态的工作线程
任务多的时候适当创建新的工作线程,任务少的时候适当销毁一些工作线程
按照设定的工作线程量的最大最小个数来控制工作线程的个数。
线程池

二.内存池

1.内存池的作用:解决内存碎片问题,提高内存申请分配效率,防止内存泄漏和野指针;
2.使用:可以使用Boost库和Jemalloc库的内存池,也可以自己手写内存池;
3.设计原理:
预分配内存:先申请一大块内存,根据情况划分成多个小的内存块
初始化内存块链表:将整体内存里的所有内存块包括各自的地址和状态信息,放入一个链表来维护
实现内存分配函数:当采购员宣布内存请求时,分配函数从内存链表中找到一块可用的内存,返回内存块的地址;
实现内存释放函数:当用完内存块后,将内存块中的数据清空并将该块内存加入到内存链表中并将其状态改为可用;
实现内存整理函数:内存整理是将连续可用的内存块合并为一个大的内存块,或者将某个大的内存块分割成多个小的内存块,以提高使用效率

三.数据库连接池

连接池是一个单例模式的类
所有的连接任务都放到一个队列中,可以用STL的Queue
使用互斥锁来保护队列的线程安全
可以从连接池中得到一个或多个可用的数据库连接
如果队列中没有多余的可用连接,需要动态的创建新连接
如果队列中空闲的连接太多,需要动态的销毁一部分
数据库操作完毕,需要将连接归还到连接池中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/37582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【工具推荐】Nuclei

文章目录 NucleiLinux安装方式Kali安装Windows安装 Nuclei Nuclei 是一款注重于可配置性、可扩展性和易用性的基于模板的快速漏洞验证工具。它使用 Go 语言开发,具有强大的可配置性、可扩展性,并且易于使用。Nuclei 的核心是利用模板(表示为简…

使用Jetpack Compose实现具有多选功能的图片网格

使用Jetpack Compose实现具有多选功能的图片网格 在现代应用中,多选功能是一项常见且重要的需求。例如,Google Photos允许用户轻松选择多个照片进行分享、添加到相册或删除。在本文中,我们将展示如何使用Jetpack Compose实现类似的多选行为,最终效果如下: 主要步骤 实现…

AndroidStudio报错macMissing essential plugin

电脑重启后打开studio: Missing essential plugin: org.jetbrains.android Please reinstall Android Studio from scratch. 无法使用 对应Mac下disabled_plugins.txt位于如下目录: /Users/ACB/Library/Application Support/Google/AndroidStudio4.2 …

查看Windows启动时长

(附图片)电脑自带检测开机时长---查看方式_电脑开机时长命令-CSDN博客 eventvwr - Windows日志 - 系统 - 查找 - 6013.jpg

如何利用ChatGPT改善日常生活:一个普通人的指南

当你打开 ChatGPT,显现的是一个简洁的聊天界面。 许多人利用 ChatGPT 进行日常对话。 然而,ChatGPT 的功能远不止于此。 对话只是其众多能力中的一种,如果仅将其视为高级版的聊天机器人,那未免低估了它。 AI 在信息处理方面的…

VMware ESXi 8.0U3 macOS Unlocker OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动

VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动 VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版) 发布 ESXi 8.0U3 集成驱动版,在个人电脑上运行企业级工作负载 请访…

ETAS工具导入DEXT生成Dcm及Dem模块(二)

文章目录 前言DcmDcmDsdDcmDslDcmDspDcmPageBufferCfgDem报错解决总结前言 之前一篇文章介绍了导入DEXT之后在cfggen之前的更改,cfggen完成之后,就可以生成dcm,dem的配置了,但生成完配置后,如果直接生成BSW代码,会报错。本文介绍在cfggen完成后,生成BSW代码前的修改 Dc…

哈尔滨高校大学智能制造实验室数字孪生可视化系统平台项目的验收

哈尔滨高校大学智能制造实验室数字孪生可视化系统平台项目的验收,标志着这一技术在教育领域的应用取得了新的突破。项目旨在开发一个数字孪生可视化系统平台,用于哈尔滨高校大学智能制造实验室的设备模拟、监测与数据分析。项目的主要目标包括&#xff1…

EasyExcel导入合并单元格数据

1.EasyExcel.read 方法 这里在read的时候要注意,增加这个extraRead(CellExtraTypeEnum.MERGE)来解析合并单元格的信息 ImportListener listener new ImportListener();try {EasyExcel.read(file.getInputStream(), ImportDto.class, listener).headRowNumber(1).e…

MySQL进阶:视图

视图 1. 创建视图2. 更改或删除视图3. 更新视图4. WITH OPTION CHECK子句5. 视图特点 1. 创建视图 作用:就是创建虚拟表,自动化一些重复性的查询模块,简化各种复杂操作(包括复杂的子查询和连接等)。 注意视图虽然可以…

【算法专题--链表】两数相加 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐双指针 -- 模拟进位 (使用哨兵位头节点) 🥝 什么是哨兵位头节点? 🍇思路解析 🍍案例图解 四、总结与提炼 五、共勉 一、前言 两数相加 这道题,可以说是--…

SpringCloud Alibaba Seata2.0分布式事务AT模式实践总结

这里我们划分订单、库存与支付三个module来实践Seata的分布式事务。 依赖版本(jdk17)&#xff1a; <spring.boot.version>3.1.7</spring.boot.version> <spring.cloud.version>2022.0.4</spring.cloud.version> <spring.cloud.alibaba.version>…

简单说下GPT-4

ChatGPT 4.0&#xff0c;是OpenAI开发的基于GPT-4架构的大型语言模型。它在多个方面相较于前代版本有了显著的改进。以下是从专业角度对ChatGPT 4.0的详解&#xff1a; 架构与训练 1. **架构**&#xff1a;GPT-4采用的是变压器&#xff08;Transformer&#xff09;架构&#x…

计算机监控软件有哪些?10款常年霸榜的计算机监控软件

计算机监控软件是企业管理和保护信息安全的重要工具&#xff0c;它们帮助企业管理者监督员工的计算机使用行为&#xff0c;确保工作效率、数据安全以及合规性。在众多监控软件中&#xff0c;有些产品因其卓越的功能、易用性、安全性以及持续获得的良好市场反馈而常年占据行业领…

C++——探索智能指针的设计原理

前言: RAII是资源获得即初始化&#xff0c; 是一种利用对象生命周期来控制程序资源地手段。 智能指针是在对象构造时获取资源&#xff0c; 并且在对象的声明周期内控制资源&#xff0c; 最后在对象析构的时候释放资源。注意&#xff0c; 本篇文章参考——C 智能指针 - 全部用法…

IBCS 虚拟专线——让企业用于独立IP

在当今竞争激烈的商业世界中&#xff0c;企业的数字化运营对网络和服务器的性能有着极高的要求。作为一家企业的 IT 主管&#xff0c;我深刻体会到了在网络和服务器配置方面所面临的种种挑战&#xff0c;以及 IBCS 虚拟专线带来的革命性改变。 我们企业在业务扩张的过程中&…

msvcr120.dll文件下载的高级教程,修复msvcr120.dll 详细步骤分享

当电脑系统或特定应用程序无法找到或访问到msvcr120.dll文件时&#xff0c;便会导致错误消息的出现&#xff0c;例如“找不到 msvcr120.dll”、“msvcr120.dll丢失”等。这篇文章将大家讨论关于msvcr120.dll文件的内容、msvcr120.dll丢失问题的解决方法&#xff0c;其中最常见的…

Postman接口测试工具的原理及应用详解(一)

本系列文章简介&#xff1a; 在当今软件开发的世界中&#xff0c;接口测试作为保证软件质量的重要一环&#xff0c;其重要性不言而喻。随着前后端分离开发模式的普及&#xff0c;接口测试已成为连接前后端开发的桥梁&#xff0c;确保前后端之间的数据交互准确无误。在这样的背景…

web使用cordova打包Andriod

一.安装Gradel 1.下载地址 Gradle Distributions 2.配置环境 3.测试是否安装成功 在cmd gradle -v 二.创建vite项目 npm init vitelatest npm install vite build 三.创建cordova项目 1.全局安装cordova npm install -g cordova 2. 创建项目 cordova create cordova-app c…

【扩散模型应用方向】

参考&#xff1a;CVPR 2024 | 绝了&#xff01;&#xff01;最新 diffusion 扩散模型梳理&#xff01;100篇论文、40研究方向&#xff01; 扩散模型应用方向目录 1、扩散模型改进 2、可控文生图 3、风格迁移 4、人像生成 5、图像超分 6、图像恢复 7、目标跟踪 8、目标检…