一、源码结构
 
1:下载安装包后,解压,可以看到目录结构,其中src目录下放的是源码
 
 
 
2:src源码目录下,可以看到这几个目录
 
 
mail:mail目录中存放了实现Nginx服务器邮件服务的源码,主要实现对邮件服务依赖的数据结构的定义和初始化,对SMTP协议、POP3协议和IMAP协议的实现,以及对SSL的支持。
misc:包含两个文件,一个是测试程序中引用的头文件是否与C++兼容,一个是支持Google PerfTools的使用
os:os目录只有一个unix目录,里面是针对类Unix的源码
core:core目录的源码定义了Nginx服务器赖以允许的最基础的数据结构,实现了对他们的基本操作,也实现了用户各模块公共调用的基本功能。
event:event里的源码实现了Nginx服务器的事件驱动模型,实现了Nginx服务器的消息机制
http:http目录里的源码为nginx服务器提供Web服务器提供了主要的支持
 
二、Nginx服务器的Web请求处理机制(暂且这么理解,总感觉真正的不是这样的)
 
1:同步与异步机制:描述通信模式的概念
 
同步机制:指的是发送方发送请求后,需要等到接收方发回的响应后,才接着发下一个请求。
 
 
 
异步机制:发送方发出一个请求后,不等待接收方响应这个请求,就可以继续发送下一个请求
 
 
 
 
2:阻塞与非阻塞:描述进程处理调用的方式
 
阻塞:调用结果返回之前,当前进程一直被挂起,一直等到调用结果返回之后,才进入就绪状态,获取CPU后继续执行
 
 
非阻塞:调用结果没有返回之前,当前线程不会被挂起,而是立即返回执行下一个调用
 
 
 
Nginx服务器如何处理请求:
 
Nginx服务器的一个显著优势是能够同时处理大量并发请求,它结合多进程机制和异步非阻塞机制对外提供服务
Nginx服务启动后,可以产生一个主进程(master process)和多个工作进程(workerprocess),Nginx所有的工作进程都用于接收和处理客户端的请求
 
每个工作进程都使用了异步非阻塞方式,可以处理多个客户端请求,当某个进程接收到客户端的请求后,调用IO进行处理,如果不能立即得到结果,就去处理其他的请求;而客户端在此期间也无需等待,可以去处理其他的事情;当IO调用返回结果时,就会通知此工作进程;该进程得到通知,暂时挂起当前处理的事物,去响应客户端的请求。
 
select、epoll、poll、kqueue等这样的系统调用就是用来支持解决在IO调用在完成后能主动通知工作进程,这些系统调用也常被称为时间驱动模型,他们提供了一种机制,让进程可以同时处理多个并发请求,不用关心IO调用的具体状态。IO调用完全由事件驱动模型来管理,事件准备好后就通知工作进程事件已经就绪。
 
 
 
select库:
 
1)创建所关注事件的描述符集合。对于一个描述符,可以关注读(read)事件、写(write)事件、以及异常(Exception)事件。所以创建三类事件的描述符集合,分别用来收集读事件、写事件、异常事件的描述符。
 
2)调用底层提供的select()函数等待事件发生
 
3)然后轮询所有事件描述符集合中的每一个事件描述符,检查是否有相应的事件发生,如果有就进行处理
 
poll库:
 
与select库的工作方式一样,先创建一个关注事件的描述符集合,再去等待事件发生,然后轮询描述符集合,检查有没有事件发生,如果有就进行处理
 
区别:select需要为读事件、写事件、异常事件分别穿件一个描述符集合,在最后轮询的时候需要分别轮询这三个集合。而poll只需要创建一个集合,在每个描述符对应的结构上分别设置读事件、写事件、或异常事件、最后轮询的时候,可以同时检查这三种事件是否发生。
 
 
 
epoll库:
 
把描述符列表的管理交由内核负责,一旦有某种事件发生,内核把发生事件的描述符列表通知给进程,这样就避免了轮询整个描述符列表。
 
 
 
 
注:学习《nginx高性能Web服务器详解》的时候总结

Nginx源码结构及如何处理请求的更多相关文章

  1. Nginx源码结构

    上一章对Nginx的架构有了一个初步的了解.这章,为了对源码仔细的剖析,先要对Nginx的源码结构有一个了解.从宏观上把握源码模块的结构. 一.nginx源码的3个目录结构 在安装的nginx的目录下 ...

  2. flask 源码浅析(flask 如何处理请求(多线程,多进程,IO多路复用))

    2018-04-04 13:09:47 lucky404 阅读数 5724更多 分类专栏: python   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接 ...

  3. nginx源码学习_源码结构

    nginx的优秀除了体现在程序结构以及代码风格上,nginx的源码组织也同样简洁明了,目录结构层次结构清晰,值得我们去学习.nginx的源码目录与nginx的模块化以及功能的划分是紧密结合,这也使得我 ...

  4. nginx源码分析-源码结构

    本文主要简单介绍nginx源码目录结构.程序编译流程.如何构建学习nginx的环境等.本文以及后续nginx源码分析文章是基于nginx当前(2009-02-27)的稳定版本0.6.35进行的分析,该 ...

  5. nginx源码分析之网络初始化

    nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...

  6. Nginx源码分析:3张图看懂启动及进程工作原理

    编者按:高可用架构分享及传播在架构领域具有典型意义的文章,本文由陈科在高可用架构群分享.转载请注明来自高可用架构公众号「ArchNotes」.   导读:很多工程师及架构师都希望了解及掌握高性能服务器 ...

  7. nginx源码分析之hash的实现

    nginx实现了自己的hash数据结构,正如数据结构中讲述的那样,nginx用开放链表法解决冲突,不过不同的是一旦一个hash表被初始化后就不会被修改,即插入和删除,只进行查询操作,所以nginx通过 ...

  8. nginx源码安装

    1,首先解决系统环境: 安装rpm包组{CentOS6 跟开发相关的包组:} a.  Development Tools #yum groupinstall "Development Too ...

  9. Nginx源码安装及调优配置

    导读 由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置. Nginx编译前的优 ...

随机推荐

  1. [转]静态库、动态库,dll文件、lib文件,隐式链接、显式链接

    转自:https://blog.csdn.net/dcrmg/article/details/53427181 静态链接.动态链接 静态库和动态库分别应用在静态链接方式和动态链接方式中,所谓静态链接方 ...

  2. [python]PyPI使用国内源

    PyPI使用国内源 对于默认的pip源的速度太慢,一些国内的pip源,如下: 豆瓣(douban) https://pypi.douban.com/simple 阿里云 http://mirrors. ...

  3. HTML辅助方法

    顾名思义,HTML辅助方法(HTML Helper)就是用来辅助产生HTML之用,在开发View的时候一定会面对许多HTML标签,处理这些HTML的工作非常繁琐,为了降低View的复杂度,可以使用HT ...

  4. arch Linux 安装完,无法通过 SSH 远程连接 root 用户问题

    访问 arch Linux 主机的该文件 [root@eric-laptop ~]# vim /etc/ssh/sshd_config 对应注释部分后边补上下边三行: LoginGraceTime 1 ...

  5. Java中Annotation用法

    其他还可以参考的地址 https://www.cnblogs.com/skywang12345/p/3344137.html Annotation Annotation其实是代码里的特殊标记,这些标记 ...

  6. Loadrunner加密算法脚本与token作为get请求url上的参数处理

    1.当字符串被封装好加密时(下例将算法封装在md5中),使用Loadrunner编写脚本,需要进行如下操作:       1)将md5.h文件添加到Extra Files 下,如图(Loadrunne ...

  7. [uva P1601] The Morning after Halloween

    [uva P1601] The Morning after Halloween 题目链接 非常经典的一道题目,lrj的书上也有(貌似是紫书?). 其实这题看起来就比较麻烦.. 首先要保证小鬼不能相遇, ...

  8. 50个常用的Linux命令(二)sed

    [root@localhost cee]# echo this thisthisthis |sed 's/this/THIS/g'THIS THISTHISTHIS[root@localhost ce ...

  9. 对TCP协议握手的理解(转)

    reference:https://www.cnblogs.com/awkflf11/p/9191708.html 目录: 31.Tcp握手的一些问题? 21.Tcp三次握手及SYN攻击: 四次握手? ...

  10. L1-057 PTA使我精神焕发

    以上是湖北经济学院同学的大作.本题就请你用汉语拼音输出这句话. 输入格式: 本题没有输入. 输出格式: 在一行中按照样例输出,以惊叹号结尾. 输入样例: 无 输出样例: PTA shi3 wo3 ji ...