• l14 IO模型


     一、基本概念

    I/O即数据的读取(接收)或写入(发送)操作

    通常用户进程中的一个完整I/O分为两个阶段

            1.用户进程空间<-->内核空间

            2.内核空间<-->设备空间(磁盘、网卡等)

    I/O分为内存I/O、网络I/O和磁盘I/O三种

    同步和异步

            对于一个线程的请求调用来讲,同步和异步的区别在于是否要等这个请求出最终结果

            对于多个线程而言,同步或异步就是线程间的步调是否要一致、是否要协调

            同步也经常用在一个线程内先后两个函数的调用上

            异步就是一个请求返回时一定不知道结果,还得通过其他机制来获知结果,如:主动轮询或被动通知

    阻塞和非阻塞

            阻塞与非阻塞与等待消息通知时的状态(调用线程)有关

            阻塞和同步是完全不同的概念。同步是对于消息的通知机制而言,阻塞是针对等待消息通知时的状态来说的

            进程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态

    线程在运行过程中,可能由于以下几种原因进入阻塞状态:

            1.线程通过调用sleep方式进休眠状态

            2.线程调用一个在I/O上被阻塞的操作,即该操作在输入/输出操作完成前不会返回到它的调用者

            3.线程试图得到一个锁,而该锁正被其他线程持有,于是只能进入阻塞状态,等到获取了同步锁,才能恢复执行

            4.线程在等待某个触发条件

    可能阻塞套接字的Linux Sockets API调用分为以下四种:

            输入操作

            输出操作

            接受连接        accept

            外出连接        connect

    二、阻塞IO与非阻塞IO

    五种I/O模型

    1.阻塞I/O模型

    2.非阻塞I/O模型

     

     3.I/O多路复用模型

     4.信号驱动式I/O模型

    5.异步I/O模型

      

    6.五种I/O模型比较

  • 相关阅读:
    Yolov8有效涨点:YOLOv8-AM,添加多种注意力模块提高检测精度,含代码,超详细
    面试常问:HTTP 1.0 和 HTTP 1.1 有什么区别?
    【Qt】设置QT标准对话框为中文字体
    CSS 文本超出省略
    [附源码]java毕业设计茶园文化交流平台论文
    Redis RDB快照
    stream 里面的 Collectors.toMap 用法 ; list转map
    React(9)-组件引用传递(高级应用)
    python 数的计算
    【工具】工具小集
  • 原文地址:https://blog.csdn.net/revengeman/article/details/132888193