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

  • 相关阅读:
    Fix Installing .NET Framework 3.5 failed Error Code 0x800F0954 on Windows 10
    RHEL8安装五笔输入法
    Enable EPEL and Local Repository on RHEL8
    Why is Yum Replaced by DNF?
    检查Linux服务器是否被攻击的常用命令及方法
    IDEA 主题
    IDEA 如何显示一个类中所有的方法
    Appium 安装以及安装过程中遇到的问题
    Maven 如何发布 jar 包到 Nexus 私库
    java泛型的基本使用
  • 原文地址:https://www.cnblogs.com/liuzhiyun/p/12006458.html
Copyright © 2011-2022 走看看