I/O模型详解

本文详细介绍了IO模型的五种类型:阻塞IO、非阻塞IO、多路复用IO、信号驱动IO和异步IO,分别阐述了它们的工作原理和特点。在阻塞IO中,线程会等待数据准备;非阻塞IO则不等待,但需要轮询检查;多路复用IO通过选择器轮询检查多个socket;信号驱动IO利用信号通知数据就绪;异步IO则是全程由内核完成数据处理并通知用户线程。多路复用IO适用于连接数较多的情况,而异步IO则提供最高效率。
摘要由CSDN通过智能技术生成

一、概念理解

  1. IO:IO有内存IO、磁盘IO、网络IO,通常说的IO是指后两种。网络IO即为socket读取,socket在linux中被抽象为流,IO可以理解为对流的操作,对于一次IO访问(以read举例)当一个read操作发生时,它会经历两个阶段:
    第一阶段:等待数据准备,数据从磁盘拷贝到内核空间。
    第二阶段:将数据从内核空间拷贝到进程空间 。
  2. 阻塞和非阻塞:是函数/方法的实现方式,即在数据就绪之前是立刻返回还是等待。
  3. 同步和异步:同步就是当有多个任务或事件时,一个任务的执行会导致整个流程的暂时等待,没办法并发执行;异步就是当有多个任务或事件时,可以并发的执行。

二、五种IO模型

  1. 阻塞IO模型
    传统的IO模型,即在读写数据过程中会发生阻塞现象。
    用户线程发起一个IO(调用IO函数)请求时,内核会查看数据是否准备ok,如果没有准备就绪,线程就会一直等待,线程处于阻塞状态,用户线程交出cpu。直到数据准备完毕,内核将数据拷贝到用户内存,将结果返回到用户线程(IO函数返回成功),用户才解除阻塞状态。
    如图:
    在这里插入图片描述
    (1)当调用recv()函数时,系统首先检查是否有准备好的数据,如果数据没有准备好,那么系统就处于等待状态;
    (2)当数据准备好后࿰

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值