头文件|阿里面试题 | Nginx 所使用的 epoll 模型是什么?
文章插图
对于 Nginx , 相信有过 Web 服务部署经验的同学都不陌生 , 它有以下特点:
- 是一个高性能的 HTTP 和反向代理服务器 , 也是一个 IMAP/POP3/SMTP 代理服务器 。
- Nginx 相较于 Apache 具有占有内存少 , 稳定性高等优势 , 并且依靠并发能力强 , 丰富的模块库以及友好灵活的配置而闻名 。
文章插图
Nginx 目前部署量逐渐增加 , 大多数运维人员多多少少都懂点 Nginx , 但是真正其明白原理的可能少之又少 , 在许多面试中可能就 Nginx 会涉及一些实现层面的问题 。 比如一道阿里的面试题是:说说看 Nginx 所使用的 epoll 模型是什么?
错误回答:Nginx 相比较其他服务器来说就是快 , 高并发 , 快速响应 , 因为用了 epoll......
所以 epoll 以及一般可以同时见到的 select 或者 poll 分别是什么呢?
三个都是 IO 多路复用的机制 , 可以监视多个描述符的读 / 写等事件 , 一旦某个描述符就绪(一般是读或者写事件发生了) , 就能够将发生的事件通知给关心的应用程序去处理该事件 。
一些 Linux 知识铺垫在实际开始前 , 我们先回顾一点 Linux 的知识 , 对于 Linux 而言:
一切都是文件
然而为了区分不同类型的事物 , 我们有了:
- 普通文件
- 目录文件
- 链接文件
- 设备文件
文章插图
如果直接这么讲可能有些难以理解 , 对于 Linux 有一些使用的用户来说 , 会有类似如下的写法:
g++ lots_of_errors 2>&1 | head其中 2>&1中的 2 就是表示的「标准错误」 , 1 就是「标准输出」 , 中间的 & 表示后面跟的数字是文件描述符而不是一个文件(不然所有的「标准错误」就都重定向到了一个名为 1 的文件中了) 。
有了上面的知识 , 我们就可以开始来探索 select , poll 和 epoll 分别是什么了~
多路复用如文初的说明表示 , 这三者都是 I/O 多路复用机制 , 且简要介绍了多路复用的定义 , 那么如何更加直观地了解多路复用呢?
这里有张图:
文章插图
对于网页服务器 Nginx 来说 , 会有很多连接进来 ,epoll 会把他们都监视起来 , 然后像拨开关一样 , 谁有数据就拨向谁 , 然后调用相应的代码处理 。
一般来说以下场合需要使用 I/O 多路复用:
- 当客户处理多个描述字时(一般是交互式输入和网络套接口)
- 如果一个服务器既要处理 TCP , 又要处理 UDP , 一般要使用 I/O 复用
- 如果一个 TCP 服务器既要处理监听套接口 , 又要处理已连接套接口
对应的头文件和函数原型为:
文章插图
I/O 多路复用这个概念被提出来以后 ,select 是第一个实现 , 一个 select 的调用过程图如下所示:
文章插图
其缺点为:
- 每次调用 select , 都需要把 fd 集合从用户态拷贝到内核态 , 这个开销在 fd 很多时会很大
- 同时每次调用 select 都需要在内核遍历传递进来的所有 fd , 这个开销在 fd 很多时也很大
- select 支持的文件描述符数量只有 1024 , 非常小
Too many open files (24)此时就需要通过类似:ulimit -n 2048 的方式来临时提升 。
poll (1997)
对应的头文件和函数原型为:
文章插图
poll 和 select 原理一样 , 不过相比较 select 而言 , poll 可以支持大于 1024 个文件描述符 。
epoll (2002)
对应的头文件和函数原型为:
文章插图
- 王兴称美团优选目前重点是建设核心能力;苏宁旗下云网万店融资60亿元;阿里小米拟增资居然之家|8点1氪 | 美团
- 速度|华为P50Pro或采用很吓人的拍照技术:液体镜头让对焦速度更快
- Pro|iPhone 12 Pro新版本亮相 机身镀金竟取消后置摄像头
- 巨头|“社区薇娅”都不够用了 一线互联网巨头全员下场卖菜
- 简单|互联网巨头夺走菜贩生计?未必那么简单
- 摄像头|摄像头造型别出心裁 realme全新手机设计专利曝光
- 恢复|电脑文件不小心被删除了怎么恢复?文件恢复可以用这招解决!
- 阿尔法|击败李世石的AI公司,又研发出生物版“阿尔法狗”:破解50年生物学难题
- 手机|用手机镜头展示丛林秘境,vivo S7带来的不止是高清
- 卖菜|巨头正在“鞭打驱逐”卖菜贩子,资本掌控一切,你未来怎么活?