- 博客(174)
- 收藏
- 关注
原创 gflags框架安装与使用
本文介绍了gflags框架的安装与使用方法。安装只需执行sudo apt-get install libgflags-dev命令。使用步骤包括:1)包含头文件并定义参数(字符串、整型、布尔型);2)解析命令行参数;3)通过FLAGS_前缀访问参数值。文章展示了如何通过命令行参数或配置文件来覆盖默认参数值,并提供了对应的Makefile编译命令。gflags框架简化了命令行参数处理,支持运行时动态修改参数配置。
2025-08-18 22:08:23
259
原创 【仿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
原创 【Linux网络编程十】网络原理之IP协议【网络层】
本文介绍网络层的IP协议相关内容,谈路由问题与分片问题,运营商在网络中的作用是什么,NAT技术等
2025-04-21 19:43:00
957
原创 【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网络编程五】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-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
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅