• I/O多路复用


    I/O多路复用

    五种I/O模型

    1. 阻塞I/O模型

    老李去火车站买票,排队三天买到一张退票。
    耗费:在车站吃喝拉撒睡 3天,其他事一件没干。


    ### 2. 非阻塞I/O模型

    老李去火车站买票,隔12小时去火车站问有没有退票,三天后买到一张票。

    耗费:往返车站6次,路上6小时,其他时间做了好多事。


    ### 3. I/O复用模型

    3.1 select/poll

    老李去火车站买票,委托黄牛,然后每隔6小时电话黄牛询问,黄牛三天内买到票,然后老李去火车站交钱领票。
    耗费:往返车站2次,路上2小时,黄牛手续费100元,打电话17次


    #### 3.2 epoll

    老李去火车站买票,委托黄牛,黄牛买到后即通知老李去领,然后老李去火车站交钱领票。
    耗费:往返车站2次,路上2小时,黄牛手续费100元,无需打电话


    ### 4. 信号驱动模型

    老李去火车站买票,给售票员留下电话,有票后,售票员电话通知老李,然后老李去火车站交钱领票。
    耗费:往返车站2次,路上2小时,免黄牛费100元,无需打电话


    ### 5. 异步I/O模型

    老李去火车站买票,给售票员留下电话,有票后,售票员电话通知老李并快递送票上门。
    耗费:往返车站1次,路上1小时,免黄牛费100元,无需打电话


    ## I/O多路复用

    形成原因

    如果一个I/O流进来,我们就开启一个进程处理这个I/O流。那么假设现在有一百万个I/O流进来,那我们就需要开启一百万个进程一一对应处理这些I/O流(——这就是传统意义下的多进程并发处理)。思考一下,一百万个进程,你的CPU占有率会多高,这个实现方式及其的不合理。所以人们提出了I/O多路复用这个模型,一个线程,通过记录I/O流的状态来同时管理多个I/O,可以提高服务器的吞吐能力


    ### 到底什么是I/O多路复用

    I/O多路复用,I/O就是指的我们网络I/O,多路指多个TCP连接(或多个Channel),复用指复用一个或少量线程。串起来理解就是很多个网络I/O复用一个或少量的线程来处理这些连接。**

    img


    ### I/O多路复用的实现

    下图是<<Unix网络编程>>上的一张经典图

    img


    ### 用户进程与内核

    img

    img


    参考链接:https://www.jianshu.com/p/6a6845464770
  • 相关阅读:
    蓝桥杯 算法训练 ALGO-57 删除多余括号
    蓝桥杯 算法训练 ALGO-50 数组查找及替换
    蓝桥杯 算法训练 ALGO-60 矩阵乘法
    求最大公约数和最小公倍数的几种方法
    南阳OJ 1170 最大的数
    蓝桥杯 基础练习 BASIC-30 阶乘计算
    蓝桥杯 算法训练 ALGO-108 最大的体积
    蓝桥杯 算法训练 ALGO-114 黑白无常
    蓝桥杯 算法训练 ALGO-93 反置数
    蓝桥杯 算法训练 ALGO-21 装箱问题
  • 原文地址:https://www.cnblogs.com/zzliu/p/10883437.html
Copyright © 2020-2023  润新知