Linux五种IO模型

简介: 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月前
|
网络协议 安全 Linux
Linux C/C++之IO多路复用(select)
这篇文章主要介绍了TCP的三次握手和四次挥手过程,TCP与UDP的区别,以及如何使用select函数实现IO多路复用,包括服务器监听多个客户端连接和简单聊天室场景的应用示例。
99 0
|
2月前
|
存储 Linux C语言
Linux C/C++之IO多路复用(aio)
这篇文章介绍了Linux中IO多路复用技术epoll和异步IO技术aio的区别、执行过程、编程模型以及具体的编程实现方式。
115 1
Linux C/C++之IO多路复用(aio)
|
4月前
|
缓存 安全 Linux
Linux 五种IO模型
Linux 五种IO模型
|
2月前
|
网络协议 前端开发 Java
网络协议与IO模型
网络协议与IO模型
146 4
网络协议与IO模型
|
2月前
|
安全 NoSQL Java
一文搞懂网络通信的基石✅IO模型与零拷贝
【10月更文挑战第1天】本文深入探讨了网络通信中的IO模型及其优化方法——零拷贝技术。首先介绍了IO模型的概念及五种常见类型:同步阻塞、同步非阻塞、多路复用、信号驱动和异步IO模型。文章详细分析了每种模型的特点和适用场景,特别是多路复用和异步IO在高并发场景中的优势。接着介绍了零拷贝技术,通过DMA直接进行数据传输,避免了多次CPU拷贝,进一步提升了效率。最后总结了各种模型的优缺点,并提供了相关的代码示例和资源链接。
一文搞懂网络通信的基石✅IO模型与零拷贝
|
2月前
|
开发者
什么是面向网络的IO模型?
【10月更文挑战第6天】什么是面向网络的IO模型?
24 3
|
2月前
|
数据挖掘 开发者
网络IO模型
【10月更文挑战第6天】网络IO模型
49 3
|
2月前
|
缓存 Java Linux
硬核图解网络IO模型!
硬核图解网络IO模型!
|
2月前
|
数据挖掘 开发者
网络IO模型如何选择?
网络IO模型如何选择?【10月更文挑战第5天】
23 2
|
2月前
|
数据库
同步IO模型是一种常见的编程模型
【10月更文挑战第5天】同步IO模型是一种常见的编程模型
23 2