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服务期高级架构

相关文章
|
17天前
|
缓存 安全 Linux
Linux 五种IO模型
Linux 五种IO模型
|
22天前
|
网络协议 Linux 数据安全/隐私保护
在Linux中,TCP/IP 的七层模型有哪些?
在Linux中,TCP/IP 的七层模型有哪些?
|
24天前
|
Linux 数据安全/隐私保护
在Linux中,什么是文件权限?什么是rwx权限模型?
在Linux中,什么是文件权限?什么是rwx权限模型?
|
26天前
|
Linux 开发者
Linux源码阅读笔记18-插入模型及删除模块操作
Linux源码阅读笔记18-插入模型及删除模块操作
|
1月前
|
消息中间件 网络协议 Java
你不得不了解的网络IO模型知识
该文章主要讲述了网络I/O模型的相关知识,包括不同的I/O模型以及它们的特点和应用场景。
你不得不了解的网络IO模型知识
|
1月前
五种IO模型基本概念
正确选择与应用适合的I/O模型是提升程序性能,保证响应时间和处理能力的关键。选择时需要综合考虑程序的实际应用场景、性能要求以及开发和维护的复杂性。
25 1
|
1月前
|
Linux 开发者
深入理解Linux I/O模型:同步、异步、阻塞与非阻塞
【8月更文挑战第1天】在探索操作系统的奥秘中,I/O模型作为影响性能的关键因素之一,常常让开发者们感到困惑。本文将通过浅显易懂的语言和实际代码示例,揭示Linux下同步与异步、阻塞与非阻塞的概念及其区别,并指导如何在实际应用中选择合适的I/O模型以优化程序性能。
54 1
|
22天前
|
Kubernetes Linux API
在Linux中,LVS-DR模型的特性是什么?
在Linux中,LVS-DR模型的特性是什么?
|
22天前
|
负载均衡 算法 Linux
在Linux中,LVS-NAT模型的特性是什么?
在Linux中,LVS-NAT模型的特性是什么?
|
2月前
|
安全 Java Linux
(七)Java网络编程-IO模型篇之从BIO、NIO、AIO到内核select、epoll剖析!
IO(Input/Output)方面的基本知识,相信大家都不陌生,毕竟这也是在学习编程基础时就已经接触过的内容,但最初的IO教学大多数是停留在最基本的BIO,而并未对于NIO、AIO、多路复用等的高级内容进行详细讲述,但这些却是大部分高性能技术的底层核心,因此本文则准备围绕着IO知识进行展开。
115 1