码迷,mamicode.com
首页 > 其他好文 > 详细

IO复用

时间:2020-01-08 20:55:03      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:操作   时间   socket   复用   断开连接   apache   thread   net   width   

http 协议特点

  • 支持客户/服务器模式
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径
  • 灵活 :HTTP允许传输任意类型的数据对象。正在传输的类型由Content-type加以标记
  • 无连接:即限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,就断开连接。采用这种方式可以节省传输时间
  • 无状态:HTTP协议是无状态协议。无状态指-----协议对于事务处理没 有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传输的数据量增大。另一方面,再服务器不需要先前信息时它的应答就较快。

 技术图片

HTTP协议工作位置

在tcp/ip协议栈中的位置

http协议通常承载与TCP协议之上,工作在应用层

 

 

pv :page view 一次页面的访问    

uv:User View 一个用户(IP)点开页面算一个(表现一个网站活跃度)针对队里IP

active connetion:活动链接数

qps :每秒的请求数

 2E pv; active connetion 100w;qps 1-2w

 

MPM多道处理模块

  Prefork :实现了一个非线程型的。预派生的web服务器

      主进程,生成多个子进程,每个子进程处理一个请求

  Worker:主进程,生成多个子进程,每个子进程生成多个线程,每个线程响应一个请求

复用I/O

 

  event : 主进程,生成多个子进程,每个子进程响应多个请求

      它把服务进程从连接中分离出来,在开启keepalive场合下相对worker模式能够承受的了更高的并发负载

 事件驱动式I/O


 

同步:调用发出之后不会立即返回,但一旦返回,则返回即是最终结果

异步:调用发出之后,别调用方立即返回消息,但返回的并非最终结果;被调用者通过状态、通知机制等来通知调用者,或通过回调函数来处理结果

  关注点---是消息通知机制

阻塞 :调用结果返回之前,调用者会被挂起;调用者只有在得到返回结果之后才能继续;

非租塞:调用者在结果返回之前,不会被挂起,即调用不会阻塞调用者

  关注点---调用者等待被调用者返回调用结果时的状态

 

阻塞blocking IO

非租塞nonblocking IO

多路IO  multiplexing

异步  asynchronous IO

事件驱动 signal driven IO

 

基于TCP客户/服务器程序的套接字函数

技术图片

 

IO发生时涉及的对象和步骤。对一个network IO ,它会涉及到两个系统对象,一个是调用这个IO的process(or thread),另一个就是系统内核。

当一个read 操作发生时,它会经历两个阶段: 

  •   等待数据准备
  •   将数据从内核拷贝到进程中

当用户进程调用recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。

对于network IO来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的UDP包),这个时候kernel就要等待足够的数据到来。

而在用户进程这边整个进程会被阻塞。当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户进程才解除block的状态,重新运行起来。

实际上,除非特别指定,几乎所有的IO接口(包括socket接口)都是阻塞型的

阻塞:特点就是在IO执行的两个阶段(等待数据和拷贝数据两个阶段)都会被block

 技术图片 

 

select和epoll模型(Apache和Nginx)

 select同步阻塞

  •  每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大
  •  同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
  •  select支持的文件描述符数量太小,默认是1024

Epoll异步模型

  •  支持一个进程打开大数目的socket描述符
  •  IO效率不随FD数目增加而线性下降
  •  使用mmap加速内核与用户空的消息传递
  •  边缘触发和水平触发

 

同步IO:用户进程发出IO调用,去获取IO设备数据,双方的数据要经过内核缓冲区同步,完全准备好后,再复制返回到用户进程。而复制返回到用户进程会导致请求进程阻塞,直到I/O操作完成。

同步IO:导致请求进程阻塞,直到I/O操作完成。
异步IO:不导致请求进程阻塞。

异步IO:用户进程发出IO调用,去获取IO设备数据,并不需要同步,内核直接复制到进程,整个过程不导致请求进程阻塞。

所以, 阻塞IO模型、非阻塞IO模型、IO复用模型、信号驱动的IO模型者为同步IO模型,只有异步IO模型是异步IO。

 IO模型的具体实现方式对比

1.几种模式实现方式
技术图片

2.select,poll,epoll区别
apache是同步阻塞模式,select实现方式
nginx是异步非阻塞工作模式,epoll实现方式

技术图片

技术图片

技术图片

技术图片

技术图片

 

 IO复用:http://note.youdao.com/noteshare?id=002ebbbcadabb6f33cb1115aab7a7f6f&sub=BB926F20646E4E8088150B6C13FDE4B9

 https://www.cnblogs.com/f-ck-need-u/p/7624733.html

https://blog.51cto.com/anfishr/2308885

IO复用

标签:操作   时间   socket   复用   断开连接   apache   thread   net   width   

原文地址:https://www.cnblogs.com/liuzhiyun/p/12006458.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!