这份资料围绕 C++ 实现高并发 Reactor 服务器展开,从 Linux 系统基础、网络编程原理到单线程与多线程 Reactor 的完整落地,再到性能优化细节,形成一条从底层机制到工程实现的连贯路径。不同于只讲 API 调用的零散教程,它把每一层的设计取舍都拆开讲清楚,适合想真正搞懂高并发服务器底层逻辑的开发者对照着动手实现。 这门课解决的核心问题 很…
这份资料围绕 C++ 实现高并发 Reactor 服务器展开,从 Linux 系统基础、网络编程原理到单线程与多线程 Reactor 的完整落地,再到性能优化细节,形成一条从底层机制到工程实现的连贯路径。不同于只讲 API 调用的零散教程,它把每一层的设计取舍都拆开讲清楚,适合想真正搞懂高并发服务器底层逻辑的开发者对照着动手实现。
很多开发者学过 C++ 语法、写过简单的 socket 程序,但一碰到“高并发”“Reactor 模式”就容易停留在概念层面:知道 epoll 是 IO 多路复用的核心,却不清楚事件循环、事件分发、回调机制怎么串起来;听过单线程 Reactor 和多线程 Reactor 的区别,却不知道线程池该挂在 Reactor 的哪一层、连接和任务该怎么分配。这份资料就是把这些模糊的认知落地,从最基础的 Linux 环境和系统调用开始,一步步搭出一个能承载百万级并发连接的 Reactor 服务器骨架。
它解决的另一个常见问题是“只会调库,不懂原理”。很多人用成熟网络库写服务很顺手,但一旦遇到性能瓶颈、连接泄漏、事件阻塞就无从排查。这份资料从进程控制、文件描述符、时间操作这些系统层面讲起,再到 IO 多路复用的三种实现对比、Reactor 事件驱动的核心机制,最后落到单线程和多线程版本的具体编码,让你能理解每一行代码背后的系统行为,出问题时知道该从哪一层下手定位。
如果你已经掌握 C++ 基础语法,了解类、指针、内存管理这些基本概念,写过简单的命令行程序,但对 Linux 系统编程和网络编程只有零散认知,想系统地搭一个属于自己的高并发服务器框架,这份资料的节奏会很合适。它没有一上来就堆复杂设计,而是先把 Linux 环境下的并发基础打牢,再逐步引入网络层和事件驱动层的内容,过渡比较平滑。
如果你已经有一定网络编程经验,用过 select/poll/epoll 写过简单服务器,但一直没完整实现过标准 Reactor 模式,或者想把单线程版本扩展成多线程版本却不知道怎么设计线程池和任务分发,这份资料里的单线程 Reactor 实现、多线程 Reactor 改造、性能优化细节这几块会很有参考价值。你可以跳过前面的基础章节,直接从对应模块切入,对照着补全自己框架里缺失的部分。
零基础入门的话,建议先从 Linux 系统基础相关章节开始:先把进程控制、进程同步、Linux 文件与目录操作、时间处理这些内容过一遍,动手写几个进程创建、管道通信、定时器相关的小 demo,把“并发离不开操作系统”这个底层逻辑吃透。这部分是后面高并发设计的根基,不要急于跳到 Reactor 实现,不然遇到文件描述符管理、事件超时处理时容易卡壳。
系统基础打牢之后,再顺着网络编程基石、IO 多路复用、Reactor 事件驱动核心原理的顺序往下走。学 IO 多路复用的时候,建议自己分别用 select、poll、epoll 写一版简单的回声服务器,对比三者在连接数上升时的性能差异,再去理解 Reactor 为什么要基于 epoll 来做。到了单线程 Reactor 实现章节,一定要跟着把事件循环、事件注册、事件分发、读写回调这几个核心模块亲手敲出来,不要只看思路,只有写过一遍才会发现回调绑定、资源释放、错误处理这些细节有多容易出问题。
有了单线程版本之后,再去看多线程 Reactor 和线程池的章节,重点理解“主线程负责事件监听、工作线程负责业务处理”的分工模式,以及连接分配、任务队列、线程同步这些关键点。最后看性能优化章节,对照着自己写的版本找可以优化的点,比如事件触发模式的选择、缓冲区设计、连接池复用、超时清理策略等。
跟着走完整条路径,你可以独立写出一个具备完整事件驱动能力的 Reactor 服务器框架:支持监听新连接、管理大量并发连接、处理读写事件、支持定时器事件,并且能根据业务需求灵活注册回调函数。这个框架不是只能跑 demo 的玩具,而是可以在此基础上扩展成 HTTP 服务器、聊天服务器、游戏网关等实际业务服务的底层骨架。
更进一步,你还能基于单线程版本改写出多线程 Reactor 版本,合理利用多核 CPU 的性能,并且知道怎么在多线程环境下避免竞态条件、怎么设计任务队列的粒度、怎么控制线程数量和负载均衡。加上优化章节里的各种细节调整,你可以把服务器的并发连接数、吞吐量、资源占用调到一个比较理想的水平,并且具备独立排查高并发场景下常见问题的能力,比如连接泄漏、事件饥饿、惊群效应、死锁等。
这份资料的核心价值在于“从 0 实现”,所以不要只看不动手。建议每学完一个章节就对应写一个小模块:学完网络编程就写基础的 TCP 客户端和服务端,学完 IO 多路复用就把服务端改造成 epoll 版本,学完 Reactor 核心原理就把事件循环和分发机制抽出来做成类。每一步都在前一步的代码基础上迭代,最后拼起来就是完整的服务器。
练习的时候不要满足于“能跑通”,要主动给自己加测试:用压测工具模拟大量并发连接,看看自己写的服务器能撑到多少连接数、CPU 和内存占用是多少、哪里先成为瓶颈,然后再回去看优化章节里的对应点,试着调整代码再测。遇到问题先自己查系统调用返回值、打日志定位,实在卡壳再对照资料里的实现思路找差异,这样练下来,你对高并发服务器的理解会比单纯看代码深很多。
📁 mksz808-C++从0实现百万并发Reactor服务器
📁 01 第1章 C++从0实现百万并发的Reactor服务器-课程概览
📁 13 第13章 课程总结
📁 08 第8章 Reacor模式中的事件驱动机制核心原理
📁 11 第11章 优化Reactor服务器的种种细节
📁 05 第5章 网络服务器基石-网络编程与网络通讯原理
📁 02 第2章 C++工程师必须掌握-脱离Linux操作系统,谈并发没什么意义
📁 10 第10章 单线程不能发挥多核CPU的效率-线程池技术实现多线程的Reactor服务器
📁 04 第4章 进程控制和进程同步
📁 课程资料
📁 03 第3章 对网络通讯重要的-Linux的目录、文件和时间操作
📁 09 第9章 来,先实现单线程的Reactor服务器的功能
📁 06 第6章 高并发的基石-IO多路复用
📁 07 第7章 开始手把手带大家从0实现百万并发的Reactor服务器
📁 12 第12章 真金不怕火炼-在正式PC服务器测试,见证每秒百万并发
📄 01 13-1 课程复盘.mp4
📄 01 1-1 C++从0实现百万并发的Reactor服务器-课程概览.mp4
📄 04 8-4 把接受客户端连接封装成Acceptor类.mp4
📄 05 8-5 把TCP连接封装成Connection类.mp4
📄 02 8-2 把事件循环封装成EventLoop类.mp4
📄 01 8-1 用C++11的function实现函数回调.mp4
📄 07 8-7 在Acceptor类中回调TcpServer类的成员函数.mp4
📄 06 8-6 在Channel类中回调Acceptor类的成员函数.mp4
📄 03 8-3 把服务端封装成TcpServer类.mp4
📄 07 11-7 性能优化-阻止浪费,清除空闲的TCP连接(上).mp4
📄 03 11-3 用unique_ptr管理自己的资源.mp4
📄 04 11-4 用eventfd实现事件通知.mp4
📄 02 11-2 用shared_ptr管理共享资源.mp4
📄 08 11-8 性能优化-阻止浪费,清除空闲的TCP连接(中).mp4
📄 01 11-1 在多线程中如何管理资源.mp4
📄 09 11-9 性能优化-阻止浪费,清除空闲的TCP连接(下).mp4
📄 05 11-5 异步唤醒事件循环(上).mp4
📄 06 11-6 异步唤醒事件循环(下).mp4
📄 02 2-2 Linux的Hello world.mp4
📄 07 2-7 gdb常用命令.mp4
📄 03 2-3 VSCode的安装和配置.mp4
📄 01 2-1 Linux环境高级编程导学.mp4
📄 06 2-6 main函数的参数.mp4
📄 09 2-9 gdb调试正在运行中的程序.mp4
📄 05 2-5 编译规则文件makefile.mp4
📄 08 2-8 gdb调试core文件.mp4
📄 04 2-4 静态库和动态库.mp4
📄 07 4-7 共享内存.mp4
📄 03 4-3 调用可执行程序.mp4
📄 09 4-9 信号量.mp4
📄 05 4-5 僵尸进程.mp4
📄 12 4-12 UNIX环境高级编程.mp4
📄 10 4-10 多进程的生产消费者模型.mp4
📄 02 4-2 进程终止.mp4
📄 06 4-6 多进程与信号.mp4
📄 08 4-8 循环队列.mp4
📄 11 4-11 pthread线程库.mp4
📄 01 4-1 Linux的信号.mp4
📄 04 4-4 创建进程.mp4
📄 01 10-1 简单优化Buffer.mp4
📄 03 10-3 多线程的主从Reactor模型.mp4
📄 02 10-2 封装线程池ThreadPool类.mp4
📄 04 10-4 增加工作线程.mp4
📄 09 5-9 实现文件传输功能.mp4
📄 08 5-8 封装socket服务端.mp4
📄 02 5-2 .第一个网络通讯程序.mp4
📄 01 5-1 网络编程基础导学.mp4
📄 11 5-11 三次握手与四次挥手.mp4
📄 07 5-7 封装socket客户端.mp4
📄 03 5-3 基于Linux的文件操作.mp4
📄 05 5-5 主机字节序与网络字节序.mp4
📄 10 5-10 多进程的服务端.mp4
📄 04 5-4 socket函数详解.mp4
📄 06 5-6 万恶的结构体.mp4
📄 12 5-12 TCP缓存.mp4
📄 04 6-4 IO多路复用-epoll模型.mp4
📄 02 6-2 IO多路复用-select模型(下).mp4
📄 05 6-5 阻塞&非阻塞的IO.mp4
📄 07 6-7 epoll的原理.mp4
📄 01 6-1 IO多路复用-select模型(上).mp4
📄 06 6-6 水平触和&边缘触发.mp4
📄 03 6-3 IO多路复用-poll模型.mp4
📄 netserver.zip
📄 05 9-5 封装缓冲区Buffer类.mp4
📄 02 9-2 在Channel类中回调Connection类的成员函数.mp4
📄 03 9-3 在Connection类中回调TcpServer类的成员函数.mp4
📄 04 9-4 网络编程为什么需要缓冲区Buffer.mp4
📄 01 9-1 用map容器管理Connection对象.mp4
📄 07 9-7 使用发送缓冲区outputbuffer.mp4
📄 06 9-6 使用接收缓冲区inputbuffer.mp4
📄 09 9-9 实现回显服务器EchoServer.mp4
📄 08 9-8 优化回调函数.mp4
📄 01 3-1 Linux的时间操作.mp4
📄 03 3-3 Linux的系统错误.mp4
📄 02 3-2 Linux的目录操作.mp4
📄 04 3-4 目录和文件的更多操作.mp4
📄 04 7-4 把网络地址协议封装成InetAddress类.mp4
📄 06 7-6 把epoll的各种操作封装成Epoll类.mp4
📄 07 7-7 把与TCP连接通道封装成Channel类(上).mp4
📄 01 7-1 从0实现百万并发的Reactor服务器导学.mp4
📄 02 7-2 优化epoll服务端程序,为封装做准备.mp4
📄 08 7-8 把与TCP连接通道封装成Channel类(中).mp4
📄 09 7-9 把与TCP连接通道封装成Channel类(下).mp4
📄 03 7-3 优化epoll服务端程序,为封装做准备.mp4
📄 05 7-5 把socket的库函数封装成Socket类.mp4
📄 03 12-3 性能测试-100万秒的吞吐量.mp4
📄 01 12-1 如何让多线程的网络服务程序体面的退出.mp4
📄 02 12-2 如何设计更高效的Buffer.mp4
📄 04 12-4 如何基于Reactor服务器开发业务.mp4