看这个话题之前,我们先来看下之前的文章:,https://jamal-jiang.github.io/2017/03/23/Linux-%E9%98%BB%E5%A1%9E%E9%9D%9E%E9%98%BB%E5%A1%9E%EF%BC%8C%E5%90%8C%E6%AD%A5%E5%BC%82%E6%AD%A5%E7%9A%84%E5%8C%BA%E5%88%AB/
了解一下Linux的IO模型
接下来我们看看汇总的IO模型的总结:
总结一下前一篇文章的结论:
Nginx使用了epoll poll select三种模型,这三种模式都属于IO复用模型,本质上还是同步模型。三种模型的区别在哪里呢?
select poll是主动查询机制
,他们可以同时查询多个fd的状态,区别在于select有fd个数的限制,poll没有;另外他们创建的事件描述符不通,select创建读,写,异常三个集合,而poll在一个集合中设定这三种描述,由于select和poll每个循环都会检查事件的发生,而poll由于事件少,因此在性能上更高一些。
epoll是基于回调函数的,无轮询。因此当套接字较多的时候,每次select都要通过遍历所有的文件描述符来找到就绪的socket,epoll实现的回调避免了轮询。
web请求的流程:
Apache和Nginx比较: