Linux五种IO模型

一、背景知识

《UNIX网络编程》中讲了5中IO模型,分别是:阻塞IO模型和非阻塞IO模型、IO复用模型、信号驱动的IO模型和异步IO模型。注意:只有异步IO模型是异步IO操作,其余都是同步IO操作。

二、什么是IO

通常我们说的IO指的就是磁盘IO或者网络IO。IO操作分为两部分:

  • 第一部分:数据准备阶段,内核空间<–>IO设备(磁盘或者网卡)。
  • 第二部分:内核将数据拷贝到用户空间(用户空间<–>内核空间)。
2.1 什么是同步IO和异步IO?

同步IO 和 异步IO的区别在于:IO的第二个阶段是否阻塞,若是需要等待或者轮询内核,直至完成才能执行就是同步IO;异步是用户线程发起IO请求后继续执行,内核完成数据的准备工作,发信号给线程,线程响应处理。

2.2.1 阻塞IO

在这里插入图片描述
阻塞IO指的是进程发起系统调用后,进程被阻塞。转到内核空间处理,直到IO设备准备好数据,内核再将数据拷贝到用户空间,返回进程。

2.2.2 非阻塞IO

在这里插入图片描述
非阻塞IO是,进程发起系统调用,如果内核缓冲区没有数据,需要先到IO设备读取数据,此时,内核会给进程返回一个错误码,而不至于阻塞进程。进程会轮询多次调用系统调用,检查数据是否就绪,消耗CPU资源。

2.2.3 小结

阻塞IO 和 非阻塞IO 区别在与发起IO请求后第一步是否阻塞,而且非阻塞IO会一直轮询内核数据有没有准备好,浪费CPU资源,不建议用。

2.3 IO复用模型

在这里插入图片描述
多个进程的IO可以注册到一个复用器(select)上,然后让一个进程调用该select,select会监听所有注册进来的IO。如果select监听的所有IO都没有数据可读,调用select的进程就会一直阻塞在select。只要任意一个IO的内核缓冲区有数据可读,select就会返回。

除了selectIO复用外,Linux还提供了 poll 和 epoll 两种方案。

特点:

  1. 专一进程解决进程IO阻塞问题,Reactor模式。
  2. 适用于高性能服务器开发,一个进程或线程响应多个请求。
2.4 异步IO模型

在这里插入图片描述
进程发起IO操作,进程返回。内核拷贝完数据会以信号的方式,通知进程。进程在自己的信号处理函数中处理数据。

文章参考于<零声教育>的C/C++linux服务期高级架构

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值