Nginx系统学习 - 了解Nginx

面试题延伸:

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

配图:
在这里插入图片描述在这里插入图片描述

发布了65 篇原创文章 · 获赞 3 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/web_orange/article/details/105000598