第二章 传送带与引擎:Reactor 线程模型


文档摘要

第二章 · 传送带与引擎:Reactor 线程模型 本章要回答的三个问题:为什么几个线程就能伺候几十万连接?Reactor 的单线程、多线程、主从多线程三种编排各适合什么车间?以及 Netty 自带的 NIO 传送带和 Epoll 传送带,到底该装哪条? 为什么会有这一章——第一章留下的悬念 第一章的 Echo 车间里出现过两组人手:boss 组和 worker 组。当时只给了结论:boss 接单、worker 干活。但值得追问的事很多——为什么 worker 的默认人数是 CPU 核数的两倍?一条连接为什么从始至终只归一个 worker?如果全车间只有一个线程会发生什么?这些问题全部指向同一个源头:Netty 的并发骨架是从 Reactor 模式演化来的。

第二章 · 传送带与引擎:Reactor 线程模型

本章要回答的三个问题:为什么几个线程就能伺候几十万连接?Reactor 的单线程、多线程、主从多线程三种编排各适合什么车间?以及 Netty 自带的 NIO 传送带和 Epoll 传送带,到底该装哪条?

为什么会有这一章——第一章留下的悬念

第一章的 Echo 车间里出现过两组人手:boss 组和 worker 组。当时只给了结论:boss 接单、worker 干活。但值得追问的事很多——为什么 worker 的默认人数是 CPU 核数的两倍?一条连接为什么从始至终只归一个 worker?如果全车间只有一个线程会发生什么?这些问题全部指向同一个源头:Netty 的并发骨架是从 Reactor 模式演化来的。不理解这层骨架,后面的 Pipeline 线程边界、ByteBuf 归还时机、心跳延迟排查,都会变成玄学。

本章把引擎盖打开:先讲 Reactor 模式"事件分发"的核心思想与三种线程编排的取舍,再比较 NIO 与 Epoll 两条传送带在系统调用、触发方式、特性支持上的差别。学完之后,第一章那行 new NioEventLoopGroup(1) 在你眼里就不再是咒语,而是明确的产能决策。

读完能解决什么——对照开篇的三个问题

你应当能够:画出主从 Reactor 模型的分工图并解释每个箭头;根据业务特征(连接数、消息大小、计算量)选择线程编排并给出参数依据;说清 EpollEventLoopGroup 与 NioEventLoopGroup 的适用场景,并动手替换 Echo 车间的传送带验证差异。

各节怎么分工

回答哪个问题 关键产出
2.1 Reactor 模式:一个搬运工看管所有传送带 为什么少量线程扛海量连接;三种编排怎么选 三种 Reactor 对比 SVG、主从模型代码与调参依据
2.2 NIO 与 Epoll:选对扳手的门道 两条传送带差在哪、装哪条 select 与 epoll 扫描机制 SVG、传输替换代码、特性对照表

主从 Reactor:车间的人员编排图

这张图是本章的纲:boss 是前台接待,worker 是各管一片区域的巡线工。2.1 讲为什么这样分工比"人海战术"和"单打独斗"都强,2.2 讲这些工人手里的检测工具(select 还是 epoll)差在哪。

先决条件

读懂第一章的 Echo 代码;了解线程池的基本概念(任务队列、工作线程);对系统调用有名词级印象(read、write、accept 足够,不要求读过内核源码)。

往下走到哪

引擎的分工定了,但字节进了车间之后流经哪些部件还没细看。第三章把镜头对准流水线本体:Channel、EventLoop、ChannelPipeline 如何咬合,ServerBootstrap 的装配流程每一步发生了什么。本章回答"人怎么派",第三章回答"活怎么流转"。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U