看完这篇,IO模型你还不了解吗

🚀什么是IO

IO 全称 (Input/OutPut), 从字面理解是 输入和输出。

从计算机知识理解: 计算机的核心(CPU\内存)与其他设备的数据转移的过程即为一次IO。例如从磁盘读取数据到内存或者从内存写人数据到磁盘都是IO。
从编程角度理解: IO会涉及到两个系统对象:一个是调用这个IO的进程对象(用户进程),另一个是系统内核。也就是说,当一个read操作发生时,将会经历这些阶段:
通过read系统调用,向内核发送读请求
内核向硬件发送读指令,并等待读就绪
DMA把将要读取的数据复制到指定的内核缓存区中
内核将数据从内核缓存区拷贝到用户进程空间中
在这里插入图片描述

🚀IO模型

阻塞I/O模型

阻塞IO模型流程:
1、应用进程向内核发起recfrom读取数据。
2、准备数据报(应用进程阻塞)。
3、将数据从内核负责到应用空间。
4、复制完成后,返回成功提示。

非阻塞IO模型

这里是引用
流程
1、应用进程向内核发起recvfrom读取数据。
2、没有数据报准备好,即刻返回EWOULDBLOCK错误码。
3、应用进程向内核发起recvfrom读取数据。
4、已有数据包准备好就进行一下 步骤,否则还是返回错误码。
5、将数据从内核拷贝到用户空间。
6、完成后,返回成功提示。

IO复用模型

这里是引用
IO复用模型解释: 系统提供函数同时监控多个fd的操作,这个函数就是我们常说到的select、poll、epoll函数,应用线程通过调用select函数就可以同时监控多个fd,select函数监控的fd中只要有任何一个数据状态准备就绪了,select函数就会返回可读状态,这时询问线程再去通知处理数据的线程,对应线程此时再发起recvfrom请求去读取数据

信号驱动式IO模型

这里是引用
IO复用模型里面的select可以实现监控的作用,但是无脑轮询肯定会造成性能浪费,
信号驱动IO模型通过这种建立信号关联的方式,发出请求后只需等待数据就绪的通知即可,显得很高级~ 但是实际应用中比较少

异步IO模型

在这里插入图片描述
基于上面的四种模型,其实还是分为两步走:
第一步 发送请求select 询问数据是否准备完成;
第二步 再去发送recevform请求读取数据

那为什么不能我只管发请求 后面的流程你自己走就好了–
于是 异步IO模型来了 它来了它来了~

信号模型是通知我们需求去执行下一步IO操作,而 异步IO模型是告知你IO已经完成,你可以做后续的事情

🚀总结

◇selcet poll empoll 的区别

这里是引用

◇BIO NIO AIO

字面理解: 阻塞IO就是 BIO 非阻塞IO就是 NIO 异步IO就是 AIO

阻塞与非阻塞: 阻塞就是发起数据请求时,如果数据准备未完成, 请求继续等待就是 阻塞 ,如果立即返回 错误信息,就是非阻塞
同步和异步: 如果请求从发起到最后完成都需要自己参与那就是同步请求,反之如果只管发送请求,只需等待请求完成那就是异步请求

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音阙斯听

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值