自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 资源 (2)
  • 收藏
  • 关注

原创 TCP的p2p网络模式

Peer-to-Peer,中文译为“对等网络”或“点对点技术”,是一种分布式应用架构,其中每个参与者(称为“节点”)都能够同时作为客户端和服务器,直接与其它节点进行数据交互,而不需要通过中央服务器中转。P2P网络的关键特征是去中心化和资源的分散共享,这使得网络更加健壮,更能适应大规模的数据交换和共享;3、其他状态转换过程。

2024-07-05 18:57:52 811 1

原创 linux系统扩展磁盘容量

虽然逻辑卷的大小已经改变,但是文件系统可能还没有意识到这一变化,也就是说,文件系统还没有被扩展到填满新的逻辑卷空间。为了使文件系统能够使用新增加的空间,你还需要进一步执行文件系统的扩展操作。需要扩展的根目录文件系统名为:/dev/mapper/ubuntu–vg-ubuntu–lv。查看还有20G的空余未使用磁盘空间。逻辑卷名为ubuntu-vg。

2024-07-03 10:08:29 420

原创 DPDK环境配置

DPDK(Data Plane Development Kit)是一个开源的软件框架,最初由Intel开发,旨在提升数据包处理性能,尤其是在Intel架构的处理器上。它允许开发者在用户空间(user space)而不是传统的内核空间(kernel space)实现高速的数据包处理,从而绕过了Linux内核协议栈,减少了上下文切换和中断处理的开销。DPDK常应用于需要高性能数据处理的场景,如软件定义网络(SDN)、网络功能虚拟化(NFV)、高性能路由器、负载均衡器、数据包过滤和分析等领域。

2024-06-17 16:22:18 392

原创 缓冲区设置

在网络通讯中,用户态缓冲区和内核态缓冲区的大小设定对于优化网络性能和确保数据传输可靠性至关重要。

2024-06-14 10:45:29 710

原创 内存池(Memory Pool)

内存池预先从操作系统申请一大块连续内存空间,并将其管理起来,当程序需要分配内存时,不再直接向操作系统请求,而是从内存池中快速分配一小块事先准备好的内存单元。当不再需要这些内存时,也不是直接归还给操作系统,而是归还给内存池,由内存池统一管理,适时或在程序结束时再归还给操作系统。内存池(Memory Pool)是一种内存管理技术,主要用于优化程序中动态内存分配和释放的效率,减少内存碎片,提高程序运行速度。: 释放内存时,不是直接还给系统,而是归还给内存池,可能需要进行合并相邻空闲块的操作以减少碎片。

2024-06-11 15:45:51 498

原创 makefile入门

Makefile 是一个用于描述文件编译、链接等构建步骤的脚本文件,它通过一系列规则来控制编译流程。

2024-06-07 14:14:46 157

原创 MQTT服务

MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布/订阅模式的消息传输协议,专为低带宽、高延迟或不可靠的网络环境设计,特别适用于物联网(IoT)场景中的设备间通信。MQTT的核心组件包括客户端和服务器(也称为代理或经纪人Broker);主要由客户端、服务器、主提、服务质量组成;客户端(Client):可以是发布者、订阅者或同时具备两种角色的设备或应用程序。服务器(Broker)

2024-06-06 16:58:20 648

原创 Linux CPU火焰图

火焰图(Flame Graph)是一种强大的性的性能分析工具,专门用于可视化cpu时间消耗咋各个函数栈上的情况,可以很快帮助开发这识别程序中的性能瓶颈和热点函数,从而有效的进行程序优化;火焰图通常以SVG格式提供,可以在现在浏览器中直接打开并进行交互,用户可以通过点击感兴趣的区域来查看函数名称、源码行等详细信息;火焰图每一层代表一个函数调用,宽度对应该函数占用CPU的时间比例,越宽的火焰图代表函数及其子函数消耗的CPU时间越多,直观的展现了哪些函数占用了大部分CPU计算资源;

2024-04-17 19:37:53 1140 1

原创 iperf3 网络性能测试

iperf3是一个主动测试网络带宽的工具,可以测试iTCP、UDP、SCTP等网络带宽;可以通过参数修改网络协议、缓冲区、测试时间、数据大小等,每个测试结果会得出吞吐量、带宽、重传数、丢包数等测试结果。

2024-04-12 15:07:02 2087

原创 c++ 原子操作

原子操作是被保证以单独一个事务被执行的操作,其他线程可以看到执行前的系统状态、或者看到原子操作执行结束后的系统状态,但是看不到原子执行中的系统执行状态;memory_order_release是写操作store函数,表示该操作之前的任何写操作都不能放到该操作之后,即写语句不能调到本语句之后;对于同一个原子变量,release操作之前的写操作,一定对随后的acquire操作后的读可见,这两种内存序一般需要配对使用。默认内存序选项,是最严格的内存顺序,前面的语句不能挑到后面,后面的语句不能调到前面。

2024-04-10 10:14:35 1365

原创 c++内存分配器

c++内存分配器相关说明

2024-04-08 13:23:51 956

原创 c++ 死锁检测与内存泄露

通过hook函数从写malloc/free函数,每次malloc都回创建一个.mem文件,free会将申请内存时创建的文件删除,当mem文件夹下存在文件时,说明会有内存泄露,查看文件中内存可以查询到具体在哪里发生内存泄露。valgrind是一款内存错误检测工具,而helgrind是valgrind工具集成的一款工具,用于检测多线程程序中的竞争条件和死锁;helgrind通过获取模拟死锁的获取和释放来检测线程之间是否存在非法的资源访问序列,从而查找可能出现死锁的编程错误。超时后释放已经获取的资;

2024-04-02 15:26:30 1212

原创 FIO磁盘读写压力测试

FIO是一款强大的I/O基准测试工具,用来对磁盘的读写能力进行压力测试,它支持十多种I/O引擎,提供了丰富的参数来模拟复杂的I/O负载场景。

2024-03-13 10:37:36 636

原创 网络编程 io_uring

io_uring高性能网络I/O处理

2024-03-01 09:58:47 1180

原创 c++类型推导

c++类型推导。

2024-02-22 16:04:10 514 1

原创 网络异步编程

网络异步编程

2024-02-01 14:36:57 962

原创 http客户端简单demo

http

2023-11-10 16:29:50 707

转载 Reactor与Rroactor网络模型

Reactor与Proactor网络模型

2023-03-27 20:39:47 343

原创 C++内存分析工具

c++ 内存分析工具

2023-02-28 10:29:36 2868 1

原创 跳表简单实现

跳表的简单实现

2023-02-28 10:28:29 114 1

原创 c++ 守护进程

C++守护进程

2023-02-28 10:26:38 283

原创 LRU算法

LRU

2023-02-28 09:41:23 51

原创 C++ 内存模型

c++ 内存模型

2022-12-17 14:25:33 1118 1

原创 C++ 面向对象

c++面向对象的内存管理

2022-12-17 14:24:41 234

原创 奇异递归模板(CRTP)

奇异递归模板

2022-07-11 20:35:14 354

原创 C++的策略模式简单实现

现代c++策略模式

2022-06-25 16:40:43 211

原创 cmake

cmakecmake_minimum_required 指定cmake的最小版本要求#CMake最小版本要求2.8.2cmake_minimum_required(VERSION 2.8.2)project 定义工程名称,并指定工程支持的编译语言#指定工程名字和版本号,并指定编译语言project(HELLOWORLD VERSION 1.0.0 LANGUAGES C CXX)显示定义变量#定义src变量,其值为main.cpp hello.cppset(SRC main

2022-04-16 17:42:31 715

转载 c++ 多线程锁的应用

c++ 多线程锁的应用在多线程编程中数据的同步尤为重要,锁的使用可以很好的实现数据的同步;常用的有互斥锁,还有其他锁,包括自旋锁、读写锁、和乐观锁等,在不同的场景可以挑选使用不同的锁;一、互斥锁和自旋锁互斥锁和自旋锁时最底层的两种锁,其他高级锁都是基于他们实现的;互斥锁和自旋锁都可以保证在同一时间,只有一个线程可以访问;当有一个线程加锁后,其他线程加锁就会失败;互斥锁和自旋锁在加锁失败后的处理方式不同:互斥锁:加锁失败后,线程会释放CPU,给其他线程使用;自旋锁:加锁失败后,线程会忙等待,不停

2021-12-27 16:34:03 1034

原创 正则表达式

正则表达式请添加图片描述. 匹配除“\n”之外的任何单个字符,要匹配包括 ‘\n’ 在内的任何字符,请使用 ‘[.\n]’ 的模式?匹配一次或者0次单个字符,另外所用是非贪婪模式+匹配1次或者多次,等价于{1,}`;*匹配0次或者多次,等价于{0,}`;\b 匹配一个长度为0的字串;\btring\b 匹配以tring为边界的字符串\d 匹配一个数字字符,等价与[0-9]\D 匹配一个非数字字符,等价与[·^0-9]\w 匹配包括下划线在内的任何单词符号,等价与[a-zA-Z0-9]\

2021-12-12 15:31:10 187

转载 SQL优化小技巧

SQL优化小技巧一、避免使用 select *​ 使用select * 会一次查询表中所有的列数据,但是再实际场景中我们只需要其中几列数据,浪费了数据库库的很多资源,像内存和CPU等;​ 此外查询的数量通过万网络IO传输过程也会增加数据传输时间;select * 不会走覆盖索引,会出先大量的回表操作,导致SQL性能很低;​ 因此SQL语句尽量避免查询多余的列;二、使用union all代替union​ union:会对查询结果进行并集操作,去重,同进行默认的规则排序;但是这些操作需要遍历

2021-11-28 16:51:48 187

原创 Linux进程间通信

Linux进程间通信管道、消息队列、共享内存、套接字、信号量共享内存共享内存是操作系统将进程之间共享的数据内存安排为同一块物理内存段,需要使用锁保证数据的一致性创建/获取共享内存(shmget)将共享内存链接到当前进程的地址空间(shmat)通过指针范文共享内训将共享内存从当前进程中分离(shmdt)删除共享内存(shmctl)kill 相关命令[cxl@localhost ~]$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGIL

2021-11-25 22:44:19 107

原创 一个简单的单例模板

命名空间的定义头文件mynamespace.h#ifndef _MY_NAME_SPACE_H_#define _MY_NAME_SPACE_H_//定义命名空间#define _MY_NAME_SPACE_START namespace mynamespace{#define _MY_NAME_SPACE_END }#endif单例#ifndef _INSTANCE_H_#define _INSTANCE_H_#pragma once#include <mutex>

2021-09-11 16:45:03 98

原创 一个简单的线程池

C++线程池ThreadPool.h#pragma once#include <thread>#include <mutex>#include <memory>#include <vector>#include <list>#include <iostream>#include <condition_variable>using namespace std;class Task{public:

2021-08-29 21:15:23 158

转载 c++中前置声明和#include

c++中前置声明和#include能用前置声明的尽量用前置声明,尽可能的避免用#include头文件尽量在cpp文件中包含头文件,而非在头文件中头文件相关若.h文件和cpp文件不在解决方案里:位于其文件中,单独的引用到.h文件会报“error LNK2019:无法解析外部符号”的错误,但是单独引用.cpp文件就可以,include是吧对应的代码直接拷贝过去当.h文件和.cpp文件没有在工程的解决方案里时,#include就是纯粹的拷贝和复制文件源码编译过程:远程序->预处理->

2021-08-29 17:24:05 1031

转载 C++对象内存模型

一、虚函数表指针和虚函数表虚函数表指针个数与派生类继承父类个数有关,多一个父类,派生类就多一个虚函数表指针和虚函数表; 派生类和父类同时含有虚函数时,派生类的虚函数按照父类声明的顺序(从左到右),存放在第一个父类的虚函数表后面; 成员变量按照先声明、先存储、先父类、再子类的顺序存放; 无论是派生类还是父类,当出现虚函数(普通虚函数、纯虚函数、虚虚构函数),虚函数表指针放在内存的最前面;二、覆盖和继承派生类和父类出现同名成员变量时,派生类仅仅时将父类的同名承运隐藏了,而非覆盖替换; ...

2021-07-14 23:22:26 334

原创 git入门使用

git介绍git是一个分布式版本管理控制系统,而SVN不是分布式的,git没有一个全局的版本号,而SVN有一个确定的全局版本号;git与SVN的结构如下图:git工作区、暂存区和版本库(数据仓库Repository)工作区:本地电脑工作的目录;暂存区:stage,一般存放在.git目录先的index中,故也把暂存区有时叫索引区;版本库:工作区隐藏目录.git;三者的关系如下图:git创建仓库git init:创建初始化一个本地仓库,包含工作区、暂存区和版本库,后面可以加一个指定的目

2021-04-05 15:31:06 378

原创 Linux性能优化

一、vmstat1、简介vmstat命令是一个查看虚拟内存的使用状况的工具,属于sysstat包。查看给定时间间隔的服务器的状态值,包括CPU使用率,内存、虚拟交换内存使用情况以及I/O读写情况;2、使用一般使用两个参数,第一个3表示每隔三秒采集一次服务器状态,第二个2表示总共采集两次;[root@localhost ~]# vmstat 3 2procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-

2021-03-25 20:07:21 334

原创 数据库脚本

1、查询执行最慢的sqlselect * from (select sa.SQL_TEXT, sa.SQL_FULLTEXT, sa.EXECUTIONS "执行次数", round(sa.ELAPSED_TIME / 1000000, 2) "总执行时间", round(sa.ELAPSED_TIME / 1000000 / sa.EXECUTIONS, 2) "平均执行时间", sa.COMMAND_TYPE,

2021-03-18 14:51:35 220

原创 Linux下的Core Dump

Core Dump文件当程序运行过程中异常终止或者崩溃了,操作系统会将当前的内存状态记录下来,保存在一个文件中,这就是Core Dump(核心转储);core文件会包含程序运行时的内存、寄存器状态,堆栈指针,内存管理信息和各种函数调用堆栈信息,可以理解为一个“内存快照”;通过这个core文件可以定位到程序异常退出时对应的堆栈调用信息,找出具体的问题所在。Core Dump相关设置core dump默认是不开启的,可以通过ulimit -c查看是否开启,若输出为0,则没有开启,可使用ulimit -

2021-03-15 20:07:53 767

原创 C++ STL容器迭代器失效

vector1、插入(push_back)元素。end操作返回的迭代器失效2、插入(push_back)元素,若发生扩容,即capacity返回值有变化,则需重新加载整个容器,此时begin和end操作返回的迭代器都会失效。3、删除(erase、pop_back)元素,指向删除点的迭代器失效,后面的元素的迭代器也将失效。qeque1、在deque容器首部和尾部插入元素不会使任何迭代器失效;2、在deque容器首部和尾部删除元素,只会使被删除元素的迭代器失效;3、在deque容器的其他位置

2021-03-11 14:23:16 279

c++ 使用mysql简单用例

c++ 使用mysql简单用例

2024-05-16

plc程序简单demo

plc程序简单demo

2023-11-15

测试程序,简单的mqtt通讯程序

测试程序,简单的mqtt通讯程序

2023-05-18

c++ linux 守护进程

c++ linux 守护进程

2022-11-25

OpenPose笔记PPT

openpose动作检测笔记,详细解释openpose检测的各个细节,图文并茂。

2018-08-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除