面试题延伸:
Nginx有哪些优势?
回答:多路IO复用epoll模型、CPU亲和、sendfile
说一下Nginx的多路IO复用epoll模型?
回答:采用单线程非阻塞模型+事件回调的方式,解决了select文件句柄限制问题,大大提高了并发效率。
Nginx的CPU亲和是什么样的?
回答:把CPU核心和Nginx的工作进程进行绑定,也就是把每个worker进程固定在一个cpu上执行,减少CPU cache miss,获得很好的性能。
Nginx的sendfile是什么
回答:linux2.2之后的0copy,是的传输文件只需要经过内核直接传输,免去了内核态和用户态的频繁切换。
作为中间件
Nginx可以作为各个应用之间的中间件,他是一个开源、高性能、可靠的HTTP中间件、代理服务。
常见的中间件服务有 Apache、IIS
Nginx有哪些优势?
采用IO多路复用epoll模型
多个请求到nginx后会产生多个socket流,这里就面临着多个IO流处理,若才用一个线程处理则会发生阻塞,也就是说只能有一个人访问网站,这个人访问结束后下一个人才可以访问,要解决这个问题我们引入了多进程多线程处理和多路IO复用。
多进程多线程模型和多路IO复用
一个线程只能处理一个流的I/O事件。如果想要同时处理多个流,要么多进程要么多线程,效率都不是很高。所以交给一个线程去采用多路IO复用模式。
Nginx使用Epoll模型
stream[]理解为多个IO流
IO流非阻塞模式
while true{
for i in stream[]; {
if i has data
read until unavailable
}
}
linux模型
select模型->poll模型->epoll模型
select模型
while true{
select(streams[]){
for i in stream[]; {
if i has data
read until unavailable
}
}
}
epoll模型
优势1:解决了select模型对于文件句柄FD打开限制
优势2:采用callback函数回调机制优化模型效率
while true{
select(streams[]){
for i in stream[]; {
if i has data
read until unavailable
}
}
}
CPU亲和
把CPU核心和Nginx的工作进程进行绑定,也就是把每个worker进程固定在一个cpu上执行,减少CPU cache miss,获得很好的性能。
sendfile
不使用sendfile文件传输的流程: File->内核空间->用户空间->内核空间->socket
使用sendfile后文件传输的流程: File->内核空间->socket
配图: