Nginx学习笔记(三)—Nginx的I/O模型详解

一、web请求处理机制

1.1 多进程方式

多进程方式: 服务器每接受到一个客户端请求就有服务器的 主进程生成一个子进程响应客户端,直到用户关闭连接
优点:处理速度快,子进程之间相互独立
缺点:访问过多会导致服务器资源耗尽而无法再提供请求

1.2 多线程方式

多线程方式: :与多进程方式类似,但是每收到一个客户端请求会有 服务进程派生出一个线程来和客户方进行交互。
优点:一个线程的开销远远小于一个进程,因此减轻了web服务器对系统资源的要求
缺点:当多个线程位于同一个进程内工作的时候,可以相互访问同一的内存地址空间,所以
线程相互影响
一旦主进程挂掉则所有子线程都不能工作,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定。

1.3 异步

异步的方式:nginx的epoll,apache的event等

二、同步异步,阻塞非阻塞和Nginx的I/O模型

2.1 同步与异步(应用程序与内核的交互方式)

  • 同步: 进程发出数据后,等内核返回响应以后才继续下一个请求,即如果内核一直不返回数据,那么进程就一直等,直到天荒地老,死机error。
  • 异步: 进程发出数据后,不等内核返回响应,接着处理下一个请求,内核通过回调函数来处理进程。Nginx是异步的。
  • 同步和异步关注的是消息通信机制,在同步机制中,所有的请求在服务器端得到同步,发送方和接收方对请求的处理步调是一致的;在异步机制中,所有来自发送方的请求形成一个队列,接收方处理完成后通知发送方。
  • 举个通俗的例子: 你打电话问书店老板有没有《一千零一夜》这本书,如果是同步通信机制,书店老板会说,你稍等,“我查一下”,然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过"回电"这种方式来回调。

2.2 阻塞与非阻塞(内核与IO设备的交互方式)

可以理解为内核与IO设备的交互方式,当内核收到进程请求IO数据时候的处理方式,也可以简单理解为内核需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了,否则就可以理解为非阻塞。

  • 阻塞:IO调用不能立即返回结果,即一个进程发起的IO请求不能得到立即满足时,进程就要一直等到内核响应,内核要把数据从IO设备复制到内核空间
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值