自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux CPU火焰图

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

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

原创 iperf3 网络性能测试

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

2024-04-12 15:07:02 1080

原创 c++ 原子操作

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

2024-04-10 10:14:35 1083

原创 c++内存分配器

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

2024-04-08 13:23:51 858

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

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

2024-04-02 15:26:30 1045

原创 FIO磁盘读写压力测试

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

2024-03-13 10:37:36 320

原创 网络编程 io_uring

io_uring高性能网络I/O处理

2024-03-01 09:58:47 1149

原创 c++类型推导

c++类型推导。

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

原创 网络异步编程

网络异步编程

2024-02-01 14:36:57 944

原创 http客户端简单demo

http

2023-11-10 16:29:50 693

转载 Reactor与Rroactor网络模型

Reactor与Proactor网络模型

2023-03-27 20:39:47 316

原创 C++内存分析工具

c++ 内存分析工具

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

原创 跳表简单实现

跳表的简单实现

2023-02-28 10:28:29 106

原创 c++ 守护进程

C++守护进程

2023-02-28 10:26:38 269

原创 LRU

LRU

2023-02-28 09:41:23 47

原创 C++ 内存模型

c++ 内存模型

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

原创 C++ 面向对象

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

2022-12-17 14:24:41 227

原创 奇异递归模板(CRTP)

奇异递归模板

2022-07-11 20:35:14 338

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

现代c++策略模式

2022-06-25 16:40:43 207

原创 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 693

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

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

2021-12-27 16:34:03 992

原创 正则表达式

正则表达式请添加图片描述. 匹配除“\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 181

转载 SQL优化小技巧

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

2021-11-28 16:51:48 172

原创 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 104

原创 一个简单的单例模板

命名空间的定义头文件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 93

原创 一个简单的线程池

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 149

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

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

2021-08-29 17:24:05 980

转载 C++对象内存模型

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

2021-07-14 23:22:26 265

原创 git入门使用

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

2021-04-05 15:31:06 372

原创 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 319

原创 数据库脚本

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 217

原创 Linux下的Core Dump

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

2021-03-15 20:07:53 754

原创 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 272

原创 c++内存空间

一、可执行程序内存分配1、可执行程序内存分段一个可执行程序脚本可以分为3个基本段,代码段,数据段,bss段;unix下可以使用size命令查看可执行文件的段大小信息,size a.outheader->代码text->数据data->bss1、bss(block started by symbol),通常是用来存放程序中未初始化的全局变量和静态变量的存储区域可读写,在程序执行之前bss段会自动请0,所以为初始化去的全局变量的静态变量在程序执行之前已经为0了。数据段存放的是初始

2021-03-04 17:29:00 630

原创 C++构造函数初始化列表和构造函数函数体内赋值

C++构造函数初始化列表和构造函数函数体内赋值大多数情况下构造函数初始化列表和构造函数函数体内赋值的效果是一样的,const常量和引用只能使用构造函数的初始化列表的方式进行初始化class A{public: A(int& a, int b, int c): _a(a),_b(b),_c(c) { //_a = a; //错误,引用必须在初始化列表中初始化 //_b = b; //错误,const成员变量必须在初始化列表中初始化 _c = c; //正确,和在初始化列

2021-03-04 11:45:42 644 1

原创 Lambda表达式、std::function、和std::bind函数

Lambda表达式、std::function、和std::bind函数Lambda表达式[capture](parameters) mutable exception->return-type{statement};1、capture:捕获外部变量列表2、parameters:参数列表,如果不需要参数可以省略,“()”可以i一起省略3、mutable:指示符,有来表示是否可以修改捕获的变量;默认Lambda函数是一个const函数;4、exception:异常设定5、return

2021-02-09 16:01:44 445 1

原创 C++1 只能指针enable_shared_from_this

智能指针简介智能指针主要解决动态内存释放问题,采用方式为引入一个计数器;即智能指针中实际有两个指针,故智能指针在内存中的大小时8个字节一个指向资源对象本身(element_type* _Ptr{nullptr}); 一个指向资源对象的引用计数(_Ref_count_base* _Rep{nullptr});该指针中包括连个成员变量_Uses,_Weaks _Uses记录了资源的引用计数,也就是引用资源的shared_ptr 的个数; _Weaks记录了weak_ptr的个数,相当于资源观察者

2020-12-29 11:26:39 119

原创 仿函数

仿函数(functor)是通过重载()运算符模拟函数形式的类仿函数不是函数,是个类 反函数重载了()运算符,使得它可以像函数一样调用用最少的箭引爆气球题目链接https://leetcode-cn.com/problems/minimum-number-of-arrows-to-burst-balloons/实例:输入:points = [[10, 16], [2, 8], [1, 6], [7, 12]]输出:2解释:x=6,可以射爆[2, 8]和[1, 6]两个气球,x=11

2020-12-25 17:40:45 733

转载 STL相关基础

c++Applicationc++Library(std::allocator)c++promitives(new,new[],new(),::operator new(),...)CRT(malloc/free)O.S.API容器(containers)分配器()迭代器(Iterators)算法(Algorithms)适配器()仿函数(Functors)...

2020-12-08 14:15:43 124

原创 数据库优化

优化分析性能下降SQL慢执行实现长 查询语句烂 索引失效:单值索引,复合索引 关联查询太多join 服务器调优及各个参数设置(缓冲、线程数) 等待时间长常见通用的join查询SQl执行顺序 join图 建表SQL 7中join索引简介本质是一种数据结构(排好序的数据结构),目的是提高查找效率,可类比字典;索引两大功能,查找和排序,mysql中使用B+树构建索引;一般索引本身也很大,往往以索引文件的形式存储在磁盘中优势:提高数据检索效率,降低数

2020-12-06 22:11:16 101

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关注的人

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