Nginx高性能的原因
一、IO多路复用Epoll
在了解Epoll多路复用前我们要了解Java bio模型与Linux select模型
-
Java bio——阻塞进程式的模型
bio模型建立在java C/S基础上,客户端和服务端通过socket进行连接,一对一建立,java client只有等socket.write()所有字节流输出到TCP/IP缓存区之后,才返回,如果网络传输很慢,TCP/IP缓冲区被塞满,java client只有等信息传输过去,缓冲区有空间后,才能写入。
-
Linux select模型——变更触发轮询查询,有1024数量限制
select模型监听客户端连接的socket,将所有监视的socket加入阻塞队列中,阻塞自己进程,如果有连接收到数据,就遍历整个队列,将该连接移除阻塞队列,加入工作队列中。
epoll类似于select模型,先将自己阻塞,监听客户端连接,但为了避免select遍历队列,设置回调函数,如果连接发生变化就唤醒自己并直接执行回调函数
IO多路复用Epoll总结表示:一个 线程,跟踪多个 socket 状态,哪个就绪,就读写哪个;