IO模型简介

news/2024/7/9 17:51:33 标签: 1024程序员节, IO模型, epoll, IOCP, Kqueue

IO模型简介

文章目录

  • IO模型简介
    • 1. IO
    • 2. 五种IO模型
      • 2.1 阻塞IO
      • 2.2 非阻塞IO
      • 2.3 IO多路复用
      • 2.4 信号驱动IO
      • 2.5 异步IO
    • 3. 主流操作系统的IO事件驱动模型

1. IO

I/O Device <---> Kernel Space <--->  User Space 

IO(Input/Output,输入/输出),数据的读取(输入)或写入(输出)操作。

IO主要包括:

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

用户进程的IO分为两个阶段:

  • 数据准备阶段:设备空间 <—> 内核空间
  • 数据复制阶段:内核空间 <—> 用户空间

2. 五种IO模型

IO模型英文缩写备注
阻塞IOBlocking IOBIO同步阻塞IO
非阻塞IONon-Blocking IONIO同步非阻塞IO
IO多路复用IO Mutiplexing事件驱动模型;异步阻塞IO
信号驱动IOSignal Driven IOSIGIO
异步IOAsynchronous IOAIO异步非阻塞IO

2.1 阻塞IO

进程发起IO系统调用后,进程被阻塞,转到内核空间处理,整个IO处理完毕后返回进程。

2.2 非阻塞IO

进程发起IO系统调用后,如果内核缓冲区没有数据,需要到IO设备中读取,进程返回一个错误而不会被阻塞;进程发起IO系统调用后,如果内核缓冲区有数据,内核就会把数据返回进程。

2.3 IO多路复用

IO多路复用就是一个 进程/线程同时处理多个IO请求 。该模型解决了非阻塞IO中的频繁轮询 CPU 的问题。

原理:进程把多个文件描述符注册到select/poll/epoll函数,由内核监视,函数阻塞。当有文件描述符就绪或超时的时候,函数返回,然后该进程进行相应的读/写操作。

典型应用:linux的select、poll、epoll

2.4 信号驱动IO

当进程发起一个IO操作,会向内核注册一个信号处理函数,然后进程返回不阻塞;当内核数据就绪时会发送一个信号给进程,进程便在信号处理函数中调用IO读取数据。

2.5 异步IO

当进程发起一个IO操作,进程返回不阻塞,内核把整个IO处理完后,会通知进程结果。

3. 主流操作系统的IO事件驱动模型

Windows: IOCP

Linux: epoll (poll select)

Mac(BSD): kqueue

SunOS: event ports


http://www.niftyadmin.cn/n/5118677.html

相关文章

管理类联考——英语二——翻译篇——定语从句的翻译方法

第三节 定语从句的翻译方法 定语从句的翻译主要分为限制性定语从句和非限制性定语从句的翻译。主要可以分为三种方法&#xff1a;合译法、分译法和转译法。 一、限制性定语从句的翻译方法 限制性定语从句所修饰的先行词自身意义不明确&#xff0c;被定语从句修饰限定后其意…

eshop(商城管理系统)MySQL源码

-- 实训一 T-SQL操作数据库 -- 一、创建数据库eshop&#xff08;网上商城数据库&#xff09;&#xff0c;写出下列操作的命令语句 -- 设置客户端字符集编码为gbk set names gbk; -- 1&#xff0e; 创建数据库eshop create database eshop; create data…

笔试,猴子吃香蕉,多线程写法

package demo;import java.util.concurrent.CountDownLatch;/*** description: 猴子吃香蕉* author: wxm* create: 2023-10-23 14:01**/ public class Main {public static void main(String[] args) throws InterruptedException {Monkey[] m new Monkey[3];Resource r new …

对GRUB和initramfs的小探究

竞赛时对操作系统启动过程产生了些疑问&#xff0c;于是问题导向地浅浅探究了下GRUB和initramfs相关机制&#xff0c;相关笔记先放在这里了。 内核启动流程 在传统的BIOS系统中&#xff0c;计算机具体的启动流程如下&#xff1a; 电源启动&#xff1a;当计算机的电源打开时&…

Day09字符流缓冲流序列化流IO框架

字符流 FileReader&#xff08;文件字符输入流&#xff09; 使用文件字符输入流&#xff0c;有啥好处&#xff1f; 读取中文不会出现乱码问题 FileWriter(文件字符输出流) 利用字符流将一个文本文件复制到E:盘下&#xff0c;例如&#xff1a;D:/1.txt复制到E:/2.txt 请使用…

编译原理-词法分析器

文章目录 对于词法分析器的要求概念词法分析器的功能和输出形式 词法分析器的设计词法分析器的结构单词符号的识别&#xff1a;超前搜索状态转换图 正规表达式和有限自动机正规式和正规集确定有限自动机&#xff08;DFA&#xff09;非确定有限自动机&#xff08;NFA&#xff09…

SpringBoot-集成Minio

官方文档&#xff1a;Kubernetes 的 MinIO 对象存储 — MinIO Object Storage for Kubernetes 一、简介 Minio 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频…

PureFlash云原生存储部署方法

PureFlash云原生存储 PureFlash是一个开源存储系统&#xff0c;它能为云计算和传统应用提供块存储服务。PureFlash最显著的优势是其高性能&#xff0c;每节点能提供超过100万IOPS随机写IO。 PureFlash可以以云原生的方式部署&#xff0c;并为云原生应用提供持久存储。 PureFl…