高级IO

在进入IO之前,我们需要先明白一个概念,IO实际上是分两步的——1.等待,2.数据拷贝

正式进入IO时,先来通过一个例子简单理解一下五种IO模型:

我们在食堂吃饭,需要点餐后等待做好才能吃到。现在有:
1.A同学到达窗口时点了餐以后一动也不动什么都不做就在窗口等着叫号
2.B同学点了餐就开始刷手机,过一会抬头看点的餐是不是好了
3.C同学学点餐之后告诉旁边的同事让饭好了叫一下他就开始低头玩手机
4.D同学发现有好几个窗口都可以排到这份餐,于是他在这些窗口都排了号,等待任意一个窗口即可
5.E同学则是拜托了另一位同事去帮他点餐等餐,在拿到餐之后通知他来吃就行

看了上边的例子大家是不是更!懵!了!好啦好啦,我们进入正题:

阻塞IO

在内核将数据准备好之前,系统调用会一直等待。(所有的套接字默认都是阻塞方式)

阻塞IO是最常见的IO模型。

在这里插入图片描述

非阻塞IO

如果内核还未将数据准备好,系统调用仍然会直接返回,并且返回EWOULDBLOCK错误码

非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符,这个过程称之为轮询。这对CPU来说是极大的浪费,一般只有特定场景下才使用

在这里插入图片描述

信号驱动IO

内核将数据准备好的时候,使用SIGIO信号通知应用程序进行IO操作

在这里插入图片描述

IO多路转接

虽然从流程图上看起来和阻塞IO类似,但是实际上最核心在于IO多路转接能够同时等待多个文件描述符的就绪状态

在这里插入图片描述

异步IO

由内核在数据拷贝完成时,通知应用程序(与信号驱动不同的是,信号驱动是等到了数据告诉应用程序可以拷贝数据了)

在这里插入图片描述

现在回去看例子是不是懂了一些!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值