ps:最近在学习nginx,为防止一些定义混淆或是遗忘,也是为了方便未来应对相关业务场景时的翻阅,于是特地来csdn上记录一些新学习到的知识技术,以便成长。文章内部或许会引用许多百度上的相关知识内容、博客或百科的文章片段,在下提前在这里对大家说声抱歉....
首先介绍下几个定义
1、IO多路复用
什么是IO多路复用呢?我们先假设这样一个场景,假设你现在有一个网站,某一天有一大群人突然对你的网站感兴趣,开始并发访问你的网站,这个时候对于你网站的后台而言,就会有大量请求。一个请求对于你的nginx而言就是一个socket流,所以多个socket流就会对应着多个IO流。那么对于IO流请求操作系统内核有并行处理和串行处理的概念,串行处理的方式是一个个处理,前面的发生阻塞,就没办法完成后面的请求。这个时候我们必须考虑并行的方式完成整个IO流的请求来实现最大的并发和吞吐,这时候就是用到IO复用技术。IO复用就是让一个Socket来作为复用完成整个IO流的请求。
上述过程看起来容易,但是在最早之前,众多IO流是由一个线程来处理的。假设现在进来了一个请求,一个线程去处理了,这时候又来了一个,但是上一个请求还没有处理完,得等到上一个请求处理完之后,才能继续进行处理。同样,假设还没有io流过来,那么线程便会处于等待的状态。这便会导致阻塞。针对于这种情况,有两种方式可以解决:
(1)多线程方式
(2)IO流复用
但是呢,多线程/多进程方式,对于我们的操作系统而言,较为耗费资源,所以IO多路复用才是比较好的选择。
2、非阻塞IO流模式
什么是非阻塞IO流模式呢,先简单来段代码
String[] strArray = new String[1000];
while(true){
for(int i = 0; i<strArray.length; i++){
if(strArray[i] == "123"){
System.out.println("找到了");
}
}
}
2、epoll模型
epoll是linux下的一个系统调用,用来监听大量文件描述符并对其上的触发事件进行处理。它是select/poll的增强版本,也是linux下多路复用io最常用的接口。要理解epoll是什么,首先得清楚什么是多路复用io。用户进行io操作需要经过内核,而如果所请求的io目前不满足条件(如需要从标准输入读取数据,而用户还未输入),这个时候内核就会让应用程序陷入等待,即阻塞状态。个人理解,io复用技术就是通过特定接口,将这种阻塞进行了转移,转嫁到了如select/poll/epoll之类多系统调用上,并且支持多个文件描述符多监测,即多路复用。这样epoll便可以替应用程序同时监听多个文件描述符,一旦有触发发生,内核就会通知应用程序进行处理。
优势一:解决select模型对于FD(文件句柄)的打开限制(select模型相对于上面的代码而言就是相当于,另起了一个方法,用于获取全部的String[] 中有值的部分组成一个数组,防止cpu空跑)
优势二:执行效率提升(采用callBack回调机制)
ps:说到快,突然想起来,为什么nginx的并发处理能力强,正是因为nginx使用了cpu的亲和。啥是亲和,自己去百度。nginx中工作进程利用亲和性与服务器的cpu进行“绑定”,然后防止频繁切换cpu造成的损耗。
3、nginx sendfile
百度了一波什么是sendfile,感觉这位大佬的这篇博客写的着实不错,直接贴在这里面了,方便以后查看
4、nginx 安装目录
(1)一些基本命令
rpm -ql xxx 使用yum的方式进行安装,实质上就是安装了一票子rpm包,运用这个命令,我们可以看到nginx的一些安装路径。
(2)安装目录详解
/etc/logrotate.d/nginx 这是一个配置文件,主要是用于处理nginx服务所产生的日志文件。轮转logrotate所产生的日志文件,进行日志切割。
https://www.cnblogs.com/lovelinux199075/p/9038821.html
这位大佬这篇博客里面写的很详细,mark一下
/etc/nginx 这个目录下放着nginx的核心配置文件,其中
/etc/nginx/conf 是主要启动文件
/etc/nginx/conf.d/default.conf 若是没有变更的情况下便读default.conf
/etc/nginx/fastcgi_params
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
这三个东西,是相关模块配置需要用的一些基础配置
/etc/nginx/mime.types 这个文件是配置文件格式的(文件扩展名),主要维护文件扩展名的对应关系