zoukankan      html  css  js  c++  java
  • IO复用

    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.几种模式实现方式
    I/O复用模型详解(网络总结)

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

    I/O复用模型详解(网络总结)

    I/O复用模型详解(网络总结)

    I/O复用模型详解(网络总结)

    I/O复用模型详解(网络总结)

    I/O复用模型详解(网络总结)

     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

  • 相关阅读:
    BASH让标准输出和错误输出颜色不同
    为Linux的文件管理器创建“在此打开终端”菜单
    在Linux终端中快速生成、解码二维码
    让BASH用得更舒服:提示符颜色、时间、显示返回值、终端标题显示当前目录与正在执行的命令
    Linux关联文件扩展名和打开程序
    Linux发行版教你如何选 给入门者的选择通法
    B/S架构与C/S架构的比较
    一个PB12.5安装的问题
    介绍JavaEE平台
    类与对象小结
  • 原文地址:https://www.cnblogs.com/liuzhiyun/p/12006458.html
Copyright © 2011-2022 走看看