从 Nginx 面试题延伸:事件驱动架构为什么赢了,一图看懂 Reactor 与 epoll
同批的 Nginx 真题讲了它和 Apache 两款产品在进程模型上的逐项对比。这篇退一步,不看具体产品,专门讲背后那个架构模式本身:事件驱动到底凭什么把单机连接数从几千推到万级以上,Reactor 的角色怎么分工,epoll 的两种触发模式又该怎么选。
同批的 Nginx 真题讲了它和 Apache 两款产品在进程模型上的逐项对比。这篇退一步,不看具体产品,专门讲背后那个架构模式本身:事件驱动到底凭什么把单机连接数从几千推到万级以上,Reactor 的角色怎么分工,epoll 的两种触发模式又该怎么选。
先说明属性:这是一篇经典题解析,题目出自本地历史面试资料,与任何公司的当前招聘无关。「Netty 线程模型」这道题的标准答案是四个字——主从 Reactor,但面试官真正想听的是:这四个字母落地到代码里是哪几个类,连接在它们之间怎么流转,以及为什么这套结构能撑住十万级连接。
epoll 和 select 的区别、epoll 的 LT 与 ET,这两个问题之前的真题解析已经讲过,本文不再重复。今天往后退一步,看清 epoll 所在的整张地图:Unix 网络编程的经典划分里,IO 模型一共有五种,epoll 只是其中一种模型的一个实现。