Nginx 系列学习之——多路IO复用

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,感觉这位大佬的这篇博客写的着实不错,直接贴在这里面了,方便以后查看

http://xiaorui.cc/2015/06/24/%E6%89%AF%E6%B7%A1nginx%E7%9A%84sendfile%E9%9B%B6%E6%8B%B7%E8%B4%9D%E7%9A%84%E6%A6%82%E5%BF%B5/

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 这个文件是配置文件格式的(文件扩展名),主要维护文件扩展名的对应关系

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值