io模型( 看完这篇你就懂)

io

cpu的执行速度比io设备的写入速度快多了 所以如果在等待数据的过程中一直让cpu陷入等待 将极大影响cpu的效率

io设备(网卡 硬盘设备)写入主存(内存)不通过cpu  而是通过DMA方式 与存储器直接存取

比如客户端向服务器发送数据 系统内核(linux)负责向io设备(如网卡 硬盘 等等)写入数据  用户线程申请读取数据

阻塞Io

系统内核没准备好数据(比如客户端向服务器发送数据 此时服务器io设备还没有写入完到主存) 用户线程一直被阻塞(cpu线程一直等待)

非阻塞io

系统内核没准备好数据 直接返回error 用户线程继续轮询 直到准备好
这个时候线程不是阻塞的还可以去做其它的事 准备好之后用户线程还需要自己拷贝到用户空间

(cpu线程不等待  而是轮询看他有没有准备好 准备好了再拷贝到用户空间操作)
 

异步io

系统准备好数据 复制到用户空间 然后通知用户线程 (直接准备好数据并拷贝到用户空间然后通知cpu线程)

多路复用IO

用户线程调用select后进行系统调用(内核会监视所有select负责的socket),此时用户线程被阻塞
当内核将数据准备好后就会返回,并通知用户线程进行读取操作,此时内核将数据拷贝到用户空间并返回 所有的io 请求会注册到select上

以下统称调用方为a  被调用方为b

同步阻塞相对于是b 就是说 a调用b b没有结果响应  a就阻塞了起来 直到有结果响应

同步非阻塞 就是 a调用b b如果现在还没有结果 先响应a一个没有结果的通知 a随后轮询b看有没有结果

异步就是a调用b b先响应一个ok 然后如果有结果通知随后再回调响应a

参考资料:

图解5种IO模型_琦彦的博客-CSDN博客_io模型有哪几种


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值