【C/C++开发】C++队列缓存的实现
C++队列缓存的实现
为什么使用队列缓存
c++的队列缓存主要用于解决大数据量并发时的数据存储问题,可以将并发时的数据缓存到队列中,当数据量变小时再匀速写入硬盘中。
引用queue队列
在头文件中引用queue队列
#include <queue>
using namespace std;
定义缓存结构体
struct DataInfo
{
char* pBuf;//缓存内容
int iSize;//缓存大小
DataInfo()
{
pBuf = NULL;
iSize = 0;
}
};
实例化queue队列
在头文件中实例化缓存队列
queue<DataInfo> m_dq_buf; // 缓存队列
创建管理缓存队列的临界区
CRITICAL_SECTION m_lock;
InitializeCriticalSection(&m_lock);//初始化
缓存数据
在数据回调函数或采集线程中进行数据缓存
void CallBack(int iType, char *pData, int len, void* pClass )
{
CMyClass * pThis = (CMyClass*)pClass;
DataInfo dataInfo;//实例化缓存结构体
char* pBuf = new char[1024*1024*2];//分配2M的缓存空间
//缓存推送到队列
memcpy(pBuf, pdata, len);//数据拷贝到缓存中
dataInfo.pBuf = pBuf;
dataInfo.iSize = pThis->_length;
//使用临界区加锁
EnterCriticalSection(&pThis->m_lock);//进入临界区
pThis->m_dq_buf.push(dataInfo);//数据缓存推送到队列里
LeaveCriticalSection(&pThis->m_lock);//退出临界区
}
数据处理
创建数据处理线程
HANDLE m_hThread = CreateThread(NULL, 0, thread_work, this, 0, NULL);
开始处理数据
DWORD WINAPI thread_work(LPVOID lpParmeter)
{
CMyClass * pThis = (CMyClass*)lpParmeter;
DataInfo dataInfo;//实例化缓存结构体
//当缓存队列中的数据大于0时,不断将数据取出进行处理
while(pThis->m_dq_buf.size()>0)
{
dataInfo = pThis->m_dq_buf.front();
CheckData(dataInfo);//数据处理函数对数据进行处理或存储
delete dataInfo.pBuf;//数据处理完成释放内存
//使用临界区加锁
EnterCriticalSection(&pThis->m_lock);//进入临界区
pThis->m_dq_buf.pop();//将缓存从队列中删除
LeaveCriticalSection(&pThis->m_lock);//退出临界区
}
}
以上便是缓存队列的实现过程,需要注意的是,数据处理的速度一定要大于数据获取或采集的速度,否则缓存队列里的缓存将不断增大,从而造成内存泄露。
【C/C++开发】C++队列缓存的实现的更多相关文章
- Python之路,Day10 - 异步IO\数据库\队列\缓存
Python之路,Day9 - 异步IO\数据库\队列\缓存 本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitM ...
- PHP开发中的缓存技术汇总
在PHP开发中,出于对网站服务器负载的考虑,往往需要对页面.数据等内容进行缓存处理,下面就来看看,在PHP开发中有哪些缓存方式吧. 1.页面部分缓存该种方式,是将一个页面中不经常变的部分进行静态缓存, ...
- 大数据高并发系统架构实战方案(LVS负载均衡、Nginx、共享存储、海量数据、队列缓存)
课程简介: 随着互联网的发展,高并发.大数据量的网站要求越来越高.而这些高要求都是基础的技术和细节组合而成的.本课程就从实际案例出发给大家原景重现高并发架构常用技术点及详细演练. 通过该课程的学习,普 ...
- 异步IO/协程/数据库/队列/缓存(转)
原文:Python之路,Day9 - 异步IO\数据库\队列\缓存 作者:金角大王Alex add by zhj: 文章很长 引子 到目前为止,我们已经学了网络并发编程的2个套路, 多进程,多线程,这 ...
- .Net Core 跨平台开发实战-服务器缓存:本地缓存、分布式缓存、自定义缓存
.Net Core 跨平台开发实战-服务器缓存:本地缓存.分布式缓存.自定义缓存 1.概述 系统性能优化的第一步就是使用缓存!什么是缓存?缓存是一种效果,就是把数据结果存在某个介质中,下次直接重用.根 ...
- Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能。
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能. 下面是一个效果图 ...
- 第十一章 企业项目开发--消息队列activemq
注意:本章代码基于 第十章 企业项目开发--分布式缓存Redis(2) 代码的github地址:https://github.com/zhaojigang/ssmm0 消息队列是分布式系统中实现RPC ...
- Python之路第一课Day10--随堂笔记(异步IO\数据库\队列\缓存)
本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitMQ队列 Redis\Memcached缓存 Paramiko SS ...
- Java Executor并发框架(三)ThreadPoolExecutor 队列缓存策略
前面两篇讲解了线程池中线程创建后的运行情况,其中有一系列的策略来保证线程正常运行.但是我们知道线程池是可以设置容量的,而且这容量的设置也是至关重要的,如果容量设置的太小,那么将会影响系统的运行效率,如 ...
随机推荐
- am335x system upgrade rootfs custom service using systemd script(十七)
1 Scope of Document systemd 是一个 Linux 系统基础组件的集合,提供了一个系统和服务管理器,运行为 PID 1 并负责启动其它程序.功能包括:支持并行化任务: ...
- 2-set 1823: [JSOI2010]满汉全席
这个题告诉我变量循环使用,一定要赋好初值!!!!!! 一定要赋好初值!!!!!!一定要赋好初值!!!!!!一定要赋好初值!!!!!! #include<iostream>#include& ...
- fasttext模型 训练THUCNews
# _*_coding:utf-8 _*_ import fasttext import jieba from sklearn import metrics import random def rea ...
- kaptcha 配置
问题所在: 这一段配置,不要写在 SpringMVC 文件中,要写在 Spring 配置文件! <!-- kaptcha 验证码 --> <bean id="captcha ...
- Tkinter 之RadioButton单选框标签
一.参数说明 语法 作用 Radiobutton(root,text='xxxx') 单选框文本显示内容 Radiobutton(root,variable=color) 单选框索引变量,通过变量的值 ...
- LeetCode 第 152 场周赛
一.质数排列(LeetCode-1175) 1.1 题目描述 1.2 解题思路 先统计出1-n中有多少个质数,得到质数个数\(x\),剩下的数\(y = n - x\): 使用排列组合公式得出结果 \ ...
- ifc tree
ViewerWidget* viewerWidget = new ViewerWidget(ifcModel); viewerWidget ->setRootNode(ifcModel-> ...
- 36 Flutter仿京东商城项目 用户登录 退出登录 事件广播更新状态
Login.dart import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:flutter/material.da ...
- Greenwich.SR2版本的Spring Cloud Zuul实例
网关作为对外服务,在微服务架构中是一个很重要的组件,主要体现在动态路由和接入鉴权这两个功能上.现在我们通过Spring Cloud Zuul来实现对之前a-feign-client(参见Greenwi ...
- ES6深入浅出-2 新版函数:箭头函数 2 视频-2.视频 箭头函数杂谈
杂谈coffeescript 箭头函数抄的是谁? coffeescript 双箭头的形式 箭头函数简洁的语法 数组内每一个值都平方一下 Map的写法 箭头函数的写法 平方后,每一个值再加1 numbe ...