高级IO——五种IO模型

高级IO

​ 在应用层进行高效地IO;

一、五种IO模型

1.1前置知识

​ read和write接口当没有数据或者缓冲区满了的时候就会进行阻塞式地等待,即操作系统并不一定来数据就对数据进行处理,最终是否处理由操作系统本身决定;

IO = 等待 + 拷贝;所以进行拷贝前就要判断条件是否成立,然后决定是否进行拷贝,这个条件又叫做读写事件;等待读事件就绪意味着接收缓冲区当中有数据了,可以进行读,等待写事件就绪就意味着发送缓冲区中有空间了,可以进行写操作了;

​ 高效地IO意味着可以在较短的时间内拷贝更多的数据;换句话说就是,让IO过程中的等待部分占比减少,拷贝部分增加;多线程并发访问就是使等待的时间减少了;

​ 总结:进行高效地IO就是使等待的时间进行减少;

1.2IO模型

​ 钓鱼就是等待的时间多,真正钓鱼的时间少;

​ 1.阻塞式IO,阻塞等待子进程;

在这里插入图片描述

​ 2.非阻塞式IO,非阻塞轮询等待子进程;

在这里插入图片描述

​ 3.信号驱动式IO;

在这里插入图片描述

​ 4.多路复用,多路转接IO,多线程并发访问,使得等待时间重叠,提高了命中概率;

在这里插入图片描述

​ 5.异步IO,用户发起请求,操作系统分配一个缓冲区和通知方式,进行提供数据,判断数据是否就绪并通知;

在这里插入图片描述

​ 以上前4种IO都是同步IO;

​ 阻塞IO和非阻塞IO等待和拷贝是一样的,只不过阻塞是无其他行为等待,而非阻塞是执行其他任务变相地等待,时间都是等价;

​ 同步IO和异步IO,区别就是有没有直接参与IO,异步IO不参与IO只是发起请求;

​ 异步IO本质上还是使用的一个执行流,提高不了效率并且代码容易造成逻辑混乱,所以使用了协程技术解决此问题;实际上最高效的IO方式是多路复用方式;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值