自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(174)
  • 收藏
  • 关注

原创 spdlog框架的安装与使用

spdlog日志库封装与使用 本文介绍了spdlog日志库的安装、基本使用和二次封装方法。

2025-08-18 22:54:32 519

原创 gflags框架安装与使用

本文介绍了gflags框架的安装与使用方法。安装只需执行sudo apt-get install libgflags-dev命令。使用步骤包括:1)包含头文件并定义参数(字符串、整型、布尔型);2)解析命令行参数;3)通过FLAGS_前缀访问参数值。文章展示了如何通过命令行参数或配置文件来覆盖默认参数值,并提供了对应的Makefile编译命令。gflags框架简化了命令行参数处理,支持运行时动态修改参数配置。

2025-08-18 22:08:23 259

原创 Xshell远程连接Ubuntu 24.04.2 LTS虚拟机

Xshell远程连接Ubuntu 24.04.2 LTS虚拟机

2025-08-12 21:07:08 332

原创 【仿muduo库实现并发服务器】LoopThreadPool模块

我们要避免那么线程创建之后,但是我们的eventloop,还没有被实例化之前就去获取loop的操作,这样的获取是会出问题,就是一个空了对不对所以要给它同步管理起来,也就是说你获取loop的时候,必须是它loop已经那么实例化完了才可以之间的,你如果没有实例化完那就不让你获取。比如在执行各种操作的时候,进行事件监控的时候,它就会绑定到我们eventloop对应的线程里边去,要进行某些操作的时候也是把任务压入到我们对eventloop,它的任务队列里边。而我们的从属react呢?

2025-07-01 23:05:50 1068

原创 【仿muduo库实现并发服务器】Acceptor模块

还要注意监听套接字的读事件监听不能放在构造函数中执行,因为会存在刚创建好监听套接字连接,并且启动了读事件监控,同时读事件也就绪了,调用读事件回调函数,获取新连接,但是这个时候服务器对新连接的操作回调函数还没有设置进去,监听套接字的读事件回调函数就只会获取新连接,然后调用空的回调函数,什么都不干。因为channel初始化时是需要两个参数一个是绑定的eventloop,一个是对应的套接字,而想要获取套接字,就必须要先创建套接字,创建套接字连接只能在函数体中进行,那这样channel就无法初始化了。

2025-07-01 23:05:16 1041

原创 【仿muduo库实现并发服务器】Connection模块

不过有一个注意点,就是Send()函数,将服务器处理完的数据放入到用户态的发送缓冲区中,这个外界传入的data数据可能是一个临时的数据,而Send函数只是将发送操作压入到任务队列中,有可能没有被立刻执行,所以当真正执行时,存储这个data数据的空间已经被释放了,就无法再去访问了,所以在Send()函数还没有将操作压入到任务队列中时,先将这个空间的数据拷贝出来,用一个buffer对象存储,然后传入传入给SendInLoop,SendInLoop访问的就是buffer一个拷贝对象。然后直接真正的释放连接。

2025-07-01 23:04:45 906

原创 【仿muduo库实现并发服务器】eventloop模块

不需要每次都一次一次的加锁访问任务队列,我们只需要加锁一次,然后定义一个临时的任务队列,将原来的任务队列中的任务全部交换到临时的中去,当全部取出来就可以解锁了。作用:如果别的线程要执行当前的线程中的conn的对象的函数的时候,是不会执行的,因为会涉及到安全问题,所以就需要吧他执行的任务放到这个任务队列中去,让当前线程自己执行。因为如果别的线程要执行当前的线程中的conn的对象的函数的时候,是不会执行的,因为会涉及到安全问题,所以就需要吧他执行的任务放到这个任务队列中去,让当前线程自己执行。

2025-07-01 23:04:06 1100

原创 【仿muduo库实现并发服务器】Poller模块

就绪的信息有哪个文件描述符的什么事件就绪了,光有这些信息是没有用的,因为对于描述符的channel对象不知道什么事件就绪啊,只有channel对象才能知道就绪后该怎么操作。所以需要将该描述符的什么事件就绪信息设置进对应的channel对象中(通过描述符在哈希表中映射找到channel对象),这样channel对象才能知道它就绪了什么事件,并且可以进行对应的处理,2.当事件就绪时,就绪的事件信息就会保存在struct epoll_event 结构体数据中,保存的信息有就绪的描述符fd,就绪的事件。

2025-07-01 23:00:35 820

原创 【仿muduo库实现并发服务器】Channel模块

实现Channel模块,主要是对连接进行事件管理,主要管理这个连接监控了什么事件,以及事件就绪之后该如何处理等操作。

2025-07-01 22:58:46 1035

原创 【仿muduo库实现并发服务器】使用正则表达式提取HTTP元素

使用正则表达式提取HTTP元素

2025-06-02 16:02:37 763

原创 【仿muduo库实现并发服务器】实现时间轮定时器

【仿muduo库实现并发服务器】实现时间轮定时器

2025-05-30 20:20:50 1296

原创 【高级IO】多路转接之单线程Reactor

本篇实现多路转接之单线程Reactor

2025-05-09 14:10:55 1219

原创 【高级IO】多路转接之Epoll

本篇介绍Epoll的工作原理以及接口,实现Epoll服务器

2025-05-07 15:50:44 1233

原创 【高级IO】多路转接之select

IO的本质是什么?如何实现高效的IO?本篇实现多路转接之select

2025-05-06 20:38:20 1075

原创 【Linux网络编程十一】网络原理之数据链路层

本篇总结数据链路层的工作原理以及相关知识:MAC帧和ARP协议

2025-05-06 16:21:35 731

原创 【Linux网络编程十】网络原理之IP协议【网络层】

本文介绍网络层的IP协议相关内容,谈路由问题与分片问题,运营商在网络中的作用是什么,NAT技术等

2025-04-21 19:43:00 957

原创 【MySQL】Ubuntu下C++连接MySQL

本篇总结在Ubuntu下使用C++连接MySQL

2025-04-18 20:00:01 1220

原创 【Linux网络编程九】网络原理之TCP协议【传输层】

TCP是面向连接,可靠的网络协议,可靠性主要由确认应答,流量控制,滑动窗口,超时重传,拥塞控制,连接管理,序号与确认序号等策略保证。TCP在保证可靠性的同时还在效率上做了努力,使用快重传,捎带应答,延迟应答等策略提高效率。TCP通过三次握手建立连接,四次挥手断开连接。

2025-04-03 14:58:40 839

原创 【Linux网络编程八】实现最简单Http服务器(基于Tcp套接字)【应用层】

实现一个最简单的Http服务器,分析Http服务器是如何工作的,理解Http协议。

2024-09-04 12:24:24 1312

原创 【Linux网络编程七】网络序列化和反序列化(网络版本计算器)

【Linux网络编程七】网络序列化和反序列化(网络版本计算器):本篇重点:自定义协议和序列化反序列化。以网络版本计算器为例子来理解协议定制的诸多细节问题。理解序列化和反序列化间的套路。

2024-03-15 17:43:09 1243

原创 【Linux网络编程六】服务器守护进程化Daemon

【Linux网络编程六】服务器守护进程化Daemon

2024-02-16 16:48:36 810

原创 【Linux网络编程五】Tcp套接字编程(四个版本服务器编写)

【Linux网络编程四】Tcp套接字编程(四个版本服务器编写):本篇重点:四个服务器版本:单进程版本,多进程版本,多线程版本,线程池版本。以及更多细节问题。带你学会如何使用Tcp套接字编程。

2024-02-16 16:04:29 1520 1

原创 【Linux网络编程四】Udp套接字编程网络应用场景

【Linux网络编程三】Udp套接字编程网络应用场景:场景一远程控制命令;场景二:Linux与Windows通信;场景三:简单聊天

2024-02-04 19:06:46 1465 1

原创 【Linux网络编程三】Udp套接字编程(简易版服务器)

【Linux网络编程三】Udp套接字编程(简易版服务器)本篇重点:UDP网络编程步骤:①创建套接字②绑定网络信息③接发消息;服务器端和客户端绑定细节,以及代码实现。

2024-02-02 18:34:40 1251 1

原创 【Linux网络编程二】网络基础2(网络框架)

【Linux网络编程二】网络基础2(网络框架)本篇重点:①跨网络如何通信②网络通信的本质③端口号④TCP/UDP协议⑤通用网络接口⑥网络字节序

2024-02-01 18:43:21 1095 1

原创 【Linux网络编程一】网络基础1(网络框架)

【Linux网络编程一】网络基础(网络框架)重点:①什么是协议②协议分层③操作系统与网络协议栈关系④局域网下如何通信⑤以太网下如何通信⑥交换机作用

2024-01-31 22:18:14 1147 1

原创 【Linux系统编程三十】线程池实现

【Linux系统编程三十】线程池实现,本篇重点线程池的原理以及代码实现,以及在类内创建线程的细节。

2024-01-23 12:46:17 868

原创 【Linux系统编程二十九】基于信号量的环形队列生产消费模型

【Linux系统编程二十九】基于信号量的环形队列生产消费模型,本篇重点,理解使用信号量,在环形队列生产消费模型中,信号量维持的是生产和消费者之间的同步与互斥关系,而加锁维护的是生产者和生产者,消费者和消费者之间的互斥关系。理解这层概念就能真正的理解基于信号量的环形队列生产模型!

2024-01-21 21:53:41 1026

原创 【Linux系统编程二十八】基于条件变量的阻塞队列(生产消费模型)

【Linux系统编程二十八】基于条件变量的阻塞队列(生产消费模型):重点:条件变量(原理,接口),321原则,真正理解生产消费模型,伪唤醒。

2024-01-21 15:16:55 1024

原创 【Linux系统编程二十七】:线程的互斥与同步(互斥锁的使用与应用)

【Linux系统编程二十七】:本文主要总结什么是互斥,为什么要互斥,以及互斥如何实现,主要原因是因为多线程并发访问共享资源,会造成数据不一致问题。介绍互斥锁的概念和相关接口使用,锁的应用场景,探讨同步场景下又该如何解决以及死锁问题。

2024-01-09 18:18:41 1164

原创 【Linux系统编程二十六】:线程控制与线程特性(Linux中线程库/线程创建/线程退出/线程等待)

【Linux系统编程二十六】:本篇总结Linux下线程库中如何控制线程,理解线程控制块都是在线程库中被统一管理起来,线程tid的本质就是TCB在共享区里的起始地址。熟悉掌握线程的创建,退出,等待等操作,了解线程的一些特性:独立栈,局部存储,可分离线程等。

2024-01-03 19:38:59 1180 1

原创 【Linux系统编程二十五】:线程概念(Linux中的轻量级进程)

【Linux系统编程二十五】:本篇知识点诸多,建议反复理解。线程是进程的一个执行分支,执行粒度比进程要细,如何理解?进程是系统资源分配的基本实体,而线程是系统的调度单位。如何理解?线程要比进程更轻量化,又该如何理解?页表是如何完成从虚拟地址到物理地址的映射的?什么是轻量级进程?

2023-12-29 18:52:24 1287

原创 【Linux系统编程二十四】:(信号3)--信号的捕捉处理与周边细节

【Linux系统编程二十四】:本篇知识点:sigaction如何使用,信号何时被捕捉,用户态和内核态,操作系统的本质,信号捕捉周边细节:可重入函数,volatile以及SIG_CHILD信号

2023-12-26 20:49:33 1068

原创 【Linux系统编程二十三】:(信号2)--信号的保存

【Linux系统编程二十三】:本文总结信号的保存诸多细节,信号的保存主要依赖三张表,block表,pending表,handler表,这三张表凝聚了信号的核心,介绍了对应的获取或设置系统调用接口sigprocmask() /sigpending() /signal。还介绍了信号的其他相关概念,信号递达,信号未决等等。

2023-12-24 16:03:46 877

原创 【Linux系统编程二十二】:(信号1)--信号的产生与发送

【Linux系统编程二十二】:本篇总结信号产生的五大方式,前台进程,硬件中断,以及信号异步及信号的发送等知识点。

2023-12-22 14:50:30 1028

原创 【Linux系统编程二十一】:(进程通信3)--消息队列/信号量(system v标准的内核数据结构的设计模式)

【Linux系统编程二十】:本篇将总结进程间通信之消息队列和信号量,并介绍system v标准下的内核数据结构是如何设计的,以及互斥,临界的等概念的引出,信号量的本质就是一把计数器,PV操作就是对计数器的加加减减,以上部分为后面的多线程作铺垫,

2023-12-12 11:44:34 1220

原创 【Linux系统编程二十】:(进程通信2)--命名管道/共享内存

【Linux系统编程二十】:(进程通信)--本篇总结进程之间的通信:命名管道和共享内存,详细的介绍使用它们之间的系统接口,以及各自的通信特性。

2023-11-23 14:45:57 1280

原创 【Linux系统编程十九】:(进程通信1)--匿名管道/模拟实现进程池

【Linux系统编程十九】:(进程通信)--匿名管道/模拟实现进程池,进程通信的本质就是让不同的进程看到同一份公共的资源,而父子进程可以做到对同一个文件共同访问,这个文件是属于内存级文件。本篇总结管道具有5大特性和4种情况,以及管道的应用场景:实现一个简易的进程池。

2023-11-18 14:37:53 255

原创 【Linux系统编程十八】:(基础IO5)--动静态库共享/动静态加载问题(涉及地址空间)

【Linux系统编程十七】:(基础IO4)--动静态库共享/动静态加载问题(涉及地址空间)本文探讨一个可执行程序如何加载,如何与虚拟地址关联起来的?动态库如何实现多进程共享的?动态库与地址无关码?逻辑地址,虚拟地址,线性地址,物理地址?动态库加载细节等问题

2023-11-16 18:48:41 288

原创 【Linux系统编程十七】:(基础IO4)--文件系统(inode与软硬链接)

【Linux系统编程十六】:(基础IO3)--文件系统(inode与软硬链接)总结没有打开的文件在磁盘中是如何存储的,按照什么方式进行存储的呢?理解文件系统的inode与软硬链接,以及应用。

2023-11-13 14:55:08 233

链表带环问题解决策略及想法

链表刷题必备

2023-03-10

空空如也

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

TA关注的人

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