- 博客(51)
- 收藏
- 关注
原创 【Nginx 网关开发】从源码分析 Nginx 的多进程启动原理
本文通过分析Nginx源码,探究其多进程模型实现机制。文章从配置文件中的"worker_processes"指令入手,追踪到核心命令表ngx_core_commands,进而解析配置处理流程。重点剖析了ngx_master_process_cycle函数,发现其通过fork()系统调用创建子进程,验证了Nginx主进程+工作进程的多进程架构。源码分析表明,Nginx利用配置解析、进程分叉等机制实现高性能并发处理。
2026-02-01 21:22:38
963
1
原创 【Nginx 网关开发】上手 Nginx,简简单单启动一个静态 html 页面
本文介绍了Nginx中间件的安装配置与负载均衡实现过程。首先详细说明了从GitHub下载Nginx源码后进行编译安装的步骤,包括配置模块选项、生成Makefile文件等关键操作。然后展示了如何创建静态HTML页面并配置Nginx服务器,重点讲解了proxy_pass和upstream等关键指令的使用方法。最后通过配置权重参数实现了9002和9003端口之间的负载均衡调度,其中9003端口的访问权重是9002端口的2倍。整个教程提供了从环境搭建到功能实现的完整流程,适合初学者快速掌握Nginx的基本使用方法。
2026-02-01 11:08:05
609
原创 【C++ 性能提升技巧】C++ 的引用、值类型、构造函数、移动语义与 noexcept 特性,可扩容的容器
本文探讨了C++中值类别(左值、右值、将亡值)的区别与应用,重点分析了移动语义对STL容器性能的优化作用。通过对比深/浅拷贝构造函数的特性,指出移动构造函数配合noexcept关键字可显著提升vector等容器的扩容效率。实验表明,为自定义类实现noexcept移动构造函数后,vector扩容耗时从2.3ms降至0.5ms,性能提升近5倍。文章还比较了vector和deque两种支持随机访问的自动扩容容器,建议在需要频繁扩容的场景中使用带noexcept的移动语义来优化性能。
2026-01-31 16:42:32
795
原创 【C++20新特性】概念约束特性与 “模板线程池”,概念约束是为了 “把握未知对象”
概念与约束是 C++20 的五大新特性之一,其余四个是 constexpr 元编程、协程 coroutine、范围 range 和模块 module。C++ 20 的概念与约束特性是专门服务于模板元编程的,它让模板类型、模板函数的使用变得更加方便,他只允许符合概念约束的类型传入模板。相比于不加限制修饰的模板,对于加了概念描述的模板来说,在类型还未套入的模板的时候,模板就还可以根据概念对未传入的类型进行操作、调用。一个思考问题,请问模板线程池该怎么写(任务函数作为模板)?1、函数类型当然可以被套入模板了。
2026-01-31 16:42:00
979
原创 【C++ 异步编程】C++ 20 的协程起手指南
C++20协程实践:从基础到异步任务处理 本文介绍了C++20协程的基本概念和实践应用。协程作为用户态轻量级线程,通过co_await和co_yield关键字实现控制权让出,解决了异步编程中的回调地狱问题。文章详细讲解了如何通过promise_type定义协程规则,并展示了Awaitable异步等待对象的实现。通过一个完整示例代码,演示了协程创建、异步任务处理和协程返回的全过程,帮助读者理解协程的执行流程和接口调用关系。最后提出了使用协程实现百万并发服务器的进阶目标。
2026-01-27 15:45:00
976
原创 【Linux 项目管理工具】比 Makefile 更常用的 CMakeLists.txt
本文介绍了CMake构建工具的基本概念和使用方法。作者通过对比Makefile和CMake,指出CMake更适合处理大规模项目的构建问题。文章详细讲解了CMakeLists.txt配置文件中关键命令的使用: SET命令用于变量声明 MESSAGE命令用于打印信息 ADD_EXECUTABLE命令生成可执行文件 ADD_SUBDIRECTORY命令实现多级项目管理 INSTALL命令处理文件安装 文中还提供了具体命令示例和使用场景,如通过mkdir build目录管理中间文件,以及安装路径的设置方法。最后强调
2026-01-26 15:45:00
1746
原创 【Linux 项目管理工具】Makefile 文件的语法
本文介绍了Makefile自动化构建工具的核心概念和使用方法。主要内容包括:1) Makefile三要素(目标、依赖、命令)及其基本语法;2) 伪目标.PHONY的作用与使用场景;3) Makefile中的变量类型(普通变量、自动变量)及其应用;4) 特殊符号(@、%、*)的功能与区别;5) 常用函数wildcard和patsubst的用法与示例。文章通过具体代码示例展示了如何利用Makefile管理项目构建过程,特别强调了模式规则和静态模式规则在实际项目中的应用价值,为开发者提供了实用的Makefile编
2026-01-26 11:40:01
841
原创 【Linux 项目管理工具】GDB 调试是现成 C/C++ 项目的 “造影剂”,用来分析项目的架构原理
摘要 本文介绍了GDB调试工具的核心原理与实用技巧。首先通过逆向思维视角,阐述如何利用GDB分析成功项目的架构设计。详细解析了GDB的工作机制:作为主进程通过ptrace系统调用控制子进程,实现断点设置、单步执行等功能。重点总结了常用命令组合,包括程序启动(start/run)、断点管理(break/save breakpoints)、代码执行控制(next/until)、变量检查(print/ptype)以及调用栈回溯(backtrace)。特别介绍了多线程调试方法,展示了GDB在分析程序崩溃和架构逆向中
2026-01-19 23:11:52
1013
原创 【C++ 异步编程】没有 C++20 的协程特性之前,我们是怎样完成异步编程的。搞懂这个就能理解 “协程可以像同步编程那样完成异步编程”
本文探讨了协程的出现背景及其必要性。首先对比了进程、线程和协程的核心差异,指出协程作为用户态轻量级线程的优势:极低切换成本、非抢占式调度和高并发支持(单线程可管理数十万协程)。随后通过服务器开发案例,揭示了传统异步编程的痛点:线程资源有限导致必须采用epoll多路复用,而回调嵌套形成的"回调地狱"使得程序逻辑支离破碎,维护困难。文中以C语言状态机实现为例,展示了手动管理函数指针链的复杂性,这正是协程要解决的关键问题——用同步写法实现异步逻辑,提升开发效率。协程通过挂起/恢复机制,从根本上
2026-01-19 10:15:00
1050
原创 【C++ 面向对象编程】补档:线程池和 MySQL 连接池的设计模式分析
本文分析了线程池和MySQL连接池的设计模式。线程池采用观察者模式,线程观察线程池的任务队列;MySQL连接池通过组合优化,将线程、连接、SQL任务和结果处理器解耦。两者都通过拥塞队列管理任务,实现资源复用和异步处理。线程池架构包含线程池、线程和任务队列三个角色;MySQL连接池扩展为连接池、连接/线程、SQL任务和异步处理器四个角色,并引入期权机制处理异步查询结果。文章提供了详细的架构图和设计思路,展示了如何运用设计模式解决资源管理和任务调度问题。
2026-01-16 23:39:50
1014
原创 【C/C++ 面向对象编程】设计模式都是招式,我们需要 “独孤九剑”,我们要无招胜有招
本文介绍了面向对象编程(OOP)的四大特征(封装、继承、多态、抽象)和五大设计原则(里氏替换、最小知道、接口隔离、单一职责、开放封闭)。作者通过C/C++代码示例,阐述了如何运用这些原则构建灵活可扩展的软件架构。重点强调了设计原则比具体模式更重要,它们是指导代码设计的"总决式",能帮助程序员应对需求变化。文章还指出,优秀的OOP设计应该像搭积木一样组合功能,保持接口简洁专一,并通过扩展而非修改来适应新需求。
2026-01-16 15:24:38
576
原创 【Go 与云原生】让一个 Go 项目脱离原生的操作系统——我们开始使用 Docker 制造云容器进行时
本文介绍了将Go程序打包为Docker镜像的具体方法,并与C/C++程序进行了对比。文章首先回顾了上一篇文章中的商品信息服务项目案例,强调了Go程序相比C/C++在容器化方面的优势。接着详细讲解了Docker的技术边界、与虚拟机的区别以及多容器运行机制。重点展示了前端程序的Dockerfile编写方法,采用多阶段构建策略,从基础镜像下载、环境变量设置到最终程序打包。最后提供了docker build命令的详细使用方法,完整呈现了从代码到镜像的整个构建过程,为云原生应用部署提供了实用指导。
2025-11-09 17:45:22
1011
原创 【Go 与云原生】先从 Go 对与云原生的依赖关系讲起,再讲讲 一个简单的 Go 项目热热身
本文介绍了Go语言及其典型应用场景。首先概述了Go语言的特点:编译型语言、静态类型、垃圾回收、原生并发支持和简洁语法。重点分析了Go在Docker和Kubernetes两大云原生技术中的核心作用,解释了Go语言因其编译特性、跨平台能力和性能优势被选作实现语言的原因。随后以一个商品信息服务系统项目为例,展示了如何使用Go语言结合gRPC框架开发微服务,包括proto文件定义、代码生成过程及项目结构说明,体现了Go语言在实际业务开发中的实用性。
2025-11-09 17:43:34
754
原创 【基础组件 and 网络编程】对 DPDK 的 MPMC 无锁队列 rte-ring 组件的思考分析(同时也是实战原子操作的好机会)
DPDK 是一款高性能数据平面开发工具包,其核心组件 rte-ring 是一种无锁环形队列,用于管理巨页池内存资源。rte-ring 采用原子操作实现多线程同步,避免锁竞争,提升服务器吞吐量。该队列支持生产者和消费者模式,通过柔性数组技术动态调整长度,并内置流量控制机制。rte-ring 的设计结合了缓存优化、零复制和减少上下文切换等特性,是 DPDK 高性能网络处理的关键技术之一。开发者可通过分析其源码深入理解无锁队列的实现原理。
2025-09-15 17:08:20
1059
原创 【网络编程】初识 DPDK 并配置 DPDK 环境
本文介绍了DPDK技术相关的设备环境搭建知识,主要包括三个部分: 网卡硬件原理:解释了网卡作为物理层与数字信号转换设备的工作原理,重点说明了DMA机制如何通过PCIe总线实现高效数据传输,避免CPU直接参与数据拷贝。 网卡驱动作用:阐述了网卡驱动作为操作系统与硬件间的"翻译官"功能,详细描述了sk_buff数据结构作为网络数据包在内核中的载体,如何在接收和发送流程中被创建和传递。 多队列网卡技术:对比了单队列和多队列网卡的区别,说明多队列如何通过将网络流量分散到不同CPU核心处理来解决性
2025-09-15 10:36:37
1288
原创 【网络编程】从与 TCP 服务器的对比中探讨出 UDP 协议服务器的并发方案(C 语言)
文章摘要:本文回顾了TCP服务器的实现步骤,包括初始化服务器、创建EPOLL实例、处理客户端连接、接收和发送消息等关键流程,并详细解析了bind、listen和accept等系统调用的底层机制。作者分享了零声教育的技术教程链接,涵盖Linux、Nginx、MySQL等主流技术,并附上自己关于TCP/UDP协议及reactor模型的系列文章链接。
2025-09-10 15:49:40
677
原创 【基础组件】手搓共享指针(智能指针之一)附带介绍三大智能指针的 ABC
本文介绍了C++中的智能指针,重点讲解了共享指针std::shared_ptr的实现原理和应用场景。智能指针通过RAII机制自动管理资源生命周期,主要分为独占指针(unique_ptr)、共享指针(shared_ptr)和弱指针(weak_ptr)。其中shared_ptr通过引用计数机制解决内存泄漏和悬空指针问题,允许多个指针共享同一资源,当引用计数归零时自动释放资源。文章详细分析了shared_ptr的构造、析构、赋值等核心操作,并强调了其线程安全特性,同时提醒注意循环引用问题。最后通过房地产抵押的比喻
2025-09-10 15:43:09
692
原创 【基础组件】手搓自旋锁(C++ 版本)—— 原子操作的最简单使用案例
这篇文章介绍了自旋锁的概念、实现原理及其在C++中的应用。自旋锁是一种忙等待锁机制,通过CAS原子操作实现,适用于短时间临界区资源竞争。文章详细解析了compare_exchange_weak和compare_exchange_strong两种CAS操作的区别,以及如何选择合适的内存序来保证同步性能。最后给出了自旋锁的C++实现代码建议,强调成功时使用memory_order_release保证写可见性,失败时使用memory_order_acquire确保读取最新状态。该锁适用于计算时间极短的场景,相比互
2025-09-07 17:27:44
897
原创 【硬件底层】一次过讲清 CPU 的三级缓存、MESI 缓存一致性协议和原子操作三者的关系
CPU缓存与MESI协议 CPU三级缓存(L1/L2/L3)通过分级存储设计缓解CPU与内存间的速度差异。L1最快最小(核心独享),L2次之(核心独享),L3较慢但容量大(所有核心共享),均基于局部性原理工作。缓存系统采用写回策略,配合MESI一致性协议维护数据一致性。 MESI协议定义了四种缓存行状态:Modified(已修改)、Exclusive(独占)、Shared(共享)、Invalid(无效),通过总线嗅探机制实现状态转换。当核心修改数据时,会广播使其他核心的副本失效,确保数据一致性。该机制允许C
2025-09-07 11:13:12
1631
原创 【基础组件】手撕内存池的设计代码(C 实现)
摘要 该文章介绍了内存池的概念及其在长期运行程序(如服务器)中的必要性,重点解决内存碎片问题。作者通过图示展示了内存碎片现象,并提出将小内存块组合成大结点的解决方案。文章包含C语言实现的内存池代码,区分小尺寸块(≤4KB)和大尺寸块,利用位运算实现内存对齐优化性能。内存池数据结构包括管理小块的链表节点(mp_node_s)和大块链表(mp_large_s),通过柔性数组实现动态扩展。该设计旨在减少内存碎片,提升内存分配效率,适用于需要持续稳定运行的系统程序。
2025-09-05 20:57:50
942
原创 【基础组件】手撕 MYSQL 连接池(C++ 版本)
C++ MySQL连接池实现摘要 本文介绍了基于C++的MySQL连接池实现方案,主要包含以下核心内容: 连接池设计原则: 复用性:网络连接管道和工作线程可复用 低功耗状态:无查询任务时线程休眠 任务缓冲:超负荷时能缓存涌入的查询任务 关键技术实现: 采用单例模式保证全局唯一性 使用BlockingQueuePro作为任务队列 通过SQLOperation封装MySQL查询语句 提供Query接口供生产者推送查询任务 核心组件: MySQLConnPool:管理连接池实例 MySQLConn:封装单个数据库
2025-09-05 16:30:39
1037
原创 【基础组件】手撕 C++ 的线程池(包含 C++ 语法的插叙)
本文介绍了线程池的基本概念及其在C++中的实现方法。文章首先通过类比游泳池、电池等"池"的概念,阐述了线程池的三个核心特性:资源复用、低功耗休眠和任务缓存机制。随后重点解析了一个基于双队列结构的线程池实现方案,包含生产者队列和消费者队列,通过互斥锁保证线程安全。文章详细讲解了BlockingQueuePro模板类的代码实现,包括Push、Pop、SwapQueue_等关键方法,展示了如何利用条件变量实现线程休眠与唤醒。最后还通过图示展示了线程池的工作流程,包括任务投递、队列交换和执行过程
2025-09-05 10:26:16
1198
原创 【网络编程】NtyCo协程服务器的框架(轻量级的协程方案,人称 “小线程”)
NtyCo是一个基于纯C语言实现的轻量级协程框架,专注于提升网络编程中的IO性能。该项目由零声教育的王博靖开发,对标腾讯的libco/libgo,主打"纯C、零依赖、单线程百万并发"特性。核心功能包括:1)通过汇编实现高效的协程上下文切换;2)结合epoll实现异步IO操作;3)内置调度器管理就绪、等待和睡眠三种状态的协程。相比传统Reactor模型的同步IO局限,NtyCo采用协程方案解决了高并发场景下的连接拥塞问题,其8KB固定栈大小和5k代码量展现出极高性能优势。该框架通过就绪队列
2025-08-27 17:26:53
1251
原创 【数据结构】布隆过滤器的概率模型详解及其 C 代码实现
布隆过滤器是一种高效的概率型数据结构,通过位数组和多个哈希函数快速判断元素是否存在。其核心优势在于超高的空间效率和查询速度,适用于缓存防护、爬虫去重等场景。关键原理是将元素通过k个哈希函数映射到位数组,查询时若所有对应位均为1则“可能存在”,否则“绝对不存在”。误判率可通过位数组大小(m)和哈希函数数量(k)调节,最优k值仅取决于目标误判率p。C语言实现需包含位数组、哈希函数等组件,适用于高性能场景。布隆过滤器特别适合处理海量数据下的存在性判断,虽有一定误判率,但“不存在”判断100%准确。
2025-08-23 23:30:18
1198
原创 【数据结构】跳表的概率模型详解与其 C 代码实现
本文介绍了跳表(Skip List)这一高效的数据结构,它通过多层索引加速有序链表的查找、插入和删除操作,平均时间复杂度为O(log n)。跳表在数据库(如LevelDB、Redis)、搜索引擎(如Elasticsearch)、网络路由(如P2P网络)和实时金融系统中有广泛应用。相比平衡树,跳表实现更简单,并发性能更好,支持高效范围查询。 文章详细解析了跳表的核心组成:多层节点结构、随机层数生成算法,以及查找、插入、删除操作的原理。通过类比“马里奥游戏”和“随机生长的小草”,生动解释了跳表的工作机制。此外,
2025-08-23 17:09:56
1314
原创 【数据结构】挂载红黑树的 hash 表(也叫散列表)的C 代码实现
本文介绍了哈希表(Hash Table)这一高效查找数据结构,通过哈希函数实现O(1)查询时间。重点讨论了哈希冲突的解决方案——采用红黑树挂载法,相比传统开放寻址法更优。文章分析了哈希表的核心概念(键、值、哈希函数、冲突处理)、关键性能指标(负载因子)以及MurmurHash3等优秀哈希算法。作者提供了C语言实现代码,展示了如何结合红黑树构建高性能哈希表,包括数据结构定义、键比较函数、红黑树旋转操作等核心内容。文末附有相关技术教程链接和红黑树专题文章的参考,为读者深入学习提供了丰富资源。
2025-08-23 14:23:32
1081
原创 【数据结构】B+ 树——高度近似于菌丝网络——详细解说与其 C 代码实现
本文介绍了B+树的基本概念及其与红黑树的对比,重点分析了B+树的8个核心定义特性。通过4阶B+树的示例,详细说明了中间节点和叶子节点的结构组成,以及数据插入过程中节点分裂和键值上溢的机制。文章还对比了B+树与红黑树在结构平衡性、范围查询效率、存储优化等方面的差异,指出B+树更适合磁盘存储场景,能有效减少I/O操作。最后以具体例子展示了B+树的数据插入过程,包括节点满员时的分裂处理。这些内容为理解B+树的高效数据组织方式提供了清晰的技术框架。
2025-08-22 20:07:37
942
原创 【数据结构】B 树——高度近似可”独木成林“的榕树——详细解说与其 C 代码实现
本文介绍了B树的基本概念和严格定义。B树是一种多路平衡查找树,主要用于高效查询键值对型数据列。文章详细阐述了B树的7条定义律,包括节点结构、根节点特性和叶子节点要求,并以3阶B树为例进行说明。重点讲解了B树插入数据的四种情况:(1)根节点满员时分裂;(2)正常插入;(3)插入导致节点分裂和数据上溢;(4)父节点和子节点都满员时的处理策略。文章通过图示直观展示了B树数据插入和节点分裂的过程,帮助理解B树如何通过合理组织数据实现高效查询。
2025-08-22 13:25:11
1157
原创 【数据结构】SPLAY 树的 C 代码实现及其算法的摊还分析
本文介绍了Splay树(伸展树)的基本原理和C语言实现。Splay树是一种自适应的二叉搜索树,通过splay操作将最近访问的节点移动到根节点,利用访问局部性原理提高频繁访问节点的效率。文章详细阐述了Splay树的核心特性,包括自适应性、均摊性能和简单性等,并通过C代码展示了节点结构、基本旋转操作(zig/zag)以及关键的splay操作实现。Splay树适用于需要频繁访问最近数据的场景,如输入法词库缓存等应用。
2025-08-21 23:34:26
1001
原创 【数据结构】红黑树的 C 代码实现——包括插入和删除操作的详细解析
这篇文章介绍了红黑树的基本概念、应用场景及其高效的自平衡特性。主要内容包括: 红黑树定义:五条规则确保树的平衡性,如根节点为黑、无连续红节点、黑高相同等。 应用场景:广泛用于文件系统、数据库索引等需要高效搜索的场景,对比链表说明其优势(时间复杂度为O(log N))。 自平衡机制:通过左旋/右旋调整结构,插入红色节点后通过递归修改颜色(如父节点和叔节点变黑、祖父节点变红)恢复平衡。 时间复杂度:平衡的红黑树搜索效率接近对数级(O(log₂N)),优于线性结构。 文章结合图示和代码逻辑,深入浅出地解析了红黑树
2025-08-21 14:17:38
1047
原创 【网络编程】KCP——可靠的 UDP 传输协议——的知识汇总
《基于UDP的高效传输协议KCP设计与应用》摘要:本文介绍了基于UDP协议的高效可靠传输协议KCP的设计原理与应用。通过分析UDP协议的无连接、不可靠等特性,指出其在实时应用中的优势与不足。在此基础上,详细阐述了KCP协议如何通过快速重传、选择性确认等机制实现可靠低延迟传输,特别适用于游戏、实时音视频等场景。文章还通过DNS查询实例展示了UDP报文结构,并对比了UDP与TCP的关键特性,为理解KCP协议的工作机制提供了理论基础。
2025-07-11 16:47:10
1604
原创 【网络编程】 TCP 协议栈的知识汇总
本文从TCP协议栈入手,详细解析了TCP协议的内部结构和数据传输过程。作者通过分析三次握手、数据传输和四次挥手等关键环节,结合Wireshark抓包数据,展示了TCP报文的具体格式和状态迁移。文章还介绍了TCP协议栈在应用层和传输层的位置关系,以及编程中使用的POSIX-API底层函数对TCP报文处理的封装。重点剖析了TCP状态迁移图和报文头部结构,包括端口号、序列号、控制标志位等关键字段的布局和作用。通过对TCP协议从数据结构层面进行微观解析,帮助读者深入理解TCP连接建立、数据传输和终止的全过程。
2025-07-10 16:36:20
648
原创 【网络编程】简易的 p2p 模型,实现两台虚拟机之间的简单点对点通信,并以小见大观察 TCP 协议的具体运行
摘要:本文介绍了P2P(点对点)网络的核心概念、与传统客户端-服务器模型的对比及其典型应用场景。P2P作为去中心化网络架构,具有节点平等、直接通信和资源共享等特点,广泛应用于文件共享、加密货币等领域。文章还提出了一个智能家居场景下的P2P应用构想,并详细解析了如何设计简易点对点通信代码,包括主动连接和被动监听功能,通过多线程和select机制实现。代码实现部分展示了全局状态管理、套接字设置及错误处理等关键技术要点,为构建轻量级P2P系统提供了实用参考。
2025-07-09 00:12:50
1086
原创 【网络编程】基于事务驱动 reactor 的 HTTP 服务器的 C 代码
本文介绍了如何在一个事务驱动Reactor服务器的基础上实现HTTP响应功能。通过在原有服务器代码中增加HTTP响应函数,使服务器能够处理HTTP请求并返回响应报文,支持浏览器访问和内容渲染。文章详细讲解了代码修改部分,包括状态机设计、主函数优化和接收回调函数的调整,重点阐述了如何构建HTTP响应报文并处理网络I/O事件。该实现保留了服务器的高性能特性,同时增加了HTTP协议支持,为后续业务功能扩展奠定了基础。
2025-07-03 11:03:38
724
原创 【网络编程】事务驱动 reactor 服务器的百万并发
本文介绍了如何基于EPOLL事件驱动机制实现百万级并发连接的Reactor服务器,重点分析了实现百万并发所需的核心系统参数配置。文章指出实现百万并发的关键在于调整操作系统的文件描述符上限和端口资源配置,并合理管理内存和CPU资源。通过代码优化(如关闭调试输出)和系统调优(扩展端口使用和文件描述符限制),作者展示了一个4G内存服务器如何通过20个监听端口支持360万理论连接。全文从技术原理到实践步骤,为构建高性能服务器提供了实用指导。
2025-07-02 14:28:19
771
原创 【网络编程】事件驱动 reactor 式的服务器(EPOLL机制)
本文介绍了一种基于事件驱动的reactor服务器架构设计,通过模块化方式实现网络I/O高并发处理。文章首先推荐了零声教育的Linux等技术学习资源,然后详细阐述了如何将EPOLL服务器代码拆分为三个核心模块:accept_cb(处理新连接)、read_cb(处理读事件)和send_cb(处理写事件)。通过流程图展示了整体运行机制,并提供了C语言实现的关键代码片段,包括reactor.h头文件定义和主要准备工作。该设计支持业务扩展,可降低开发难度,同时为后续实现百万级并发连接奠定了基础。
2025-06-30 18:35:19
1150
4
原创 【网络编程】EPOLL 事件触发机制的服务器
摘要 本文深入探讨了Linux EPOLL机制在构建高效网络服务器中的应用。文章对比了传统I/O模型(一I/O一线程、SELECT、POLL)与EPOLL的性能差异,重点解析了EPOLL的边缘触发(ET)模式工作原理。通过分析内核数据结构(红黑树兴趣列表和就绪链表)和核心API(epoll_create/epoll_ctl/epoll_wait),揭示了EPOLL实现O(1)时间复杂度的高效机制。文章还提供了ET模式下的编程要点:必须使用非阻塞I/O并循环读写至EAGAIN,并附有服务器程序流程图。测试表明
2025-06-28 22:55:11
1020
原创 【网络编程】多路复用的网络 I/O 服务器(C代码),select、poll 和多线程共三个版本
摘要 本文介绍了三种实现多路复用网络I/O服务器的方法,重点改进了recv和send函数的使用方式,以实现多路连接和可复用性。案例一采用"一I/O一线程"的多线程模式,通过while循环和阻塞式套接字实现复用。文章首先提供了必要的头文件及服务器初始化函数init_server,随后详细解析了案例一的实现逻辑,包括线程回调函数的设计和服务器主循环结构。该方法通过为每个连接分配独立线程,结合阻塞式I/O操作,确保服务器能够高效处理多路连接请求。
2025-06-28 00:37:42
690
原创 【网络编程】NetAssist 网络调试工具和两个极简服务器的 C 代码
摘要:本文介绍了两个基础的C++服务器开发案例,重点讲解了网络I/O的核心函数recv和send的使用。第一个案例实现了一个"丐版"服务器,只能处理单次网络I/O事务。文章详细解析了服务器创建的流程,包括套接字初始化、端口绑定、监听设置等关键步骤,并通过流程图展示了服务器的基本工作原理。同时提供了完整的C语言实现代码,包括错误处理和端口复用等实用技巧。特别说明了如何使用NetAssist工具进行服务器测试,并解释了局域网内IP地址的交互关系。作者来自零声教育,专注于C/C++后端开发教学
2025-06-26 20:02:01
988
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅