LInux——五种IO模型

Linux中的IO简述

IO主要分为以下的三种:

  • 内存IO
  • 网络IO
  • 磁盘IO

通常我们所说的IO是后两者,Linux中无法直接操作IO设备,必须通过系统调用请求kernal来协助完成IO的动作,内存会为每一个IO设备维护一个缓冲区。

IO操作会涉及两个对象:

  1. 调用这个IO的进程(或线程);
  2. 系统内核的kernal

五种模型介绍

1、阻塞IO

最简单的一种IO模型,简单理解就是死等,即进程或线程一直等待某个条件,不满足就会一直等待

当用户程序执行 read ,线程会被阻塞,一直等到内核数据准备好,并把数据从内核缓冲区拷贝到应用程序的缓冲区中,当拷贝过程完成,read 才会返回。

注意,阻塞等待的是「内核数据准备好」和「数据从内核态拷贝到用户态」这两个过程。过程如下图:请添加图片描述

2、非阻塞IO

应用进程与内核交互,不断轮询,不停地去问内核数据是否准备好

  • 如果没有准备好,返回error,应用进程得到error后,过一段时间再发送请求,在两次请求时间内,进程可以先做其他事情。
  • 如果准备好了,将数据拷贝到用户空间

请添加图片描述

3、IO多路复用

IO多路复用实际上就是用select , poll, epoll监听多个io对象,当io对象有变化(有数据)的时候就通知用户进程。好处就是单个进程可以处理多个socket。

4、信号驱动型IO模型

进程预先向预先注册一个信号处理函数,当内核数据准备好之后发送一个信号给进程

5、异步IO模型

用户进程发起read操作,告诉内核当整个操作完成时、如何通知我们、立刻就可以开始去做其它的事,内核收到read操作之后会立刻返回、所以不会对用户进程产生任何阻塞、然后、内核会等待数据准备完成、然后将数据拷贝到用户内存、当这一切都完成之后、内核会给用户进程发送一个信号、告诉它read操作完成了。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值