首页 > 系统相关 >linux io 模型浅析

linux io 模型浅析

时间:2024-09-29 15:38:25浏览次数:1  
标签:io 用户 阻塞 fd 内核 IO linux 就绪 浅析

缩写释义:
io:input/output 输入输出
fd: file descriptor 文件描述符,一个用于标识打开文件或网络连接的整数,系统为进程打开的每个文件保留一个文件描述符,可以用于读写文件

IO模型的分类:
分为同步IO和异步IO。

同步IO:用户发起IO,用户阻塞或轮训的查看是否就绪,就绪后用户进行内核态到用户态的数据拷贝。
异步IO:用户发起IO,数据是否就绪以及数据拷贝的过程全交给内核,当IO完成时内核通知用户。

同步IO分为阻塞IO、非阻塞IO、信号驱动型IO、多路复用型IO。

阻塞IO:用户发起IO后,若数据还未就绪,该线程就一直阻塞等待着数据的就绪。
非阻塞IO:用户发起IO后,若数据还未就绪,该线程不会阻塞,而是继续向后执行代码,所以需要配合循环来一直检查数据是否就绪,而这也叫做轮询。
信号驱动型IO:用户发起IO后,若数据还未就绪,该线程不会阻塞,而是继续向后执行代码,由内核来检查数据是否就绪,当数据就绪时,内核通知用户。
多路复用型IO:由一个线程来监视(等待数据就绪)多个fd,当某个fd上的数据就绪时,就通知用户。特点:多个io 复用一个后台处理进程

linux 内核提供的io多路复用方式:

  1. selector
    selector 底层使用的是位图,需要轮询检查哪些fd就绪,效率较低。
    单个线程能够监视的文件描述符的数量就是固定的(centos7.6上是1024个)。
  2. poll
    每次调用都会将fds从内核态拷贝到用户态;
    底层也是采用轮询的方式来检测文件描述符是否就绪,效率较低。
  3. epoll
    可以创建多个epoll 池,epoll 池添加 fd 的时候设置回调方法,就绪后放入队列
    使用红黑树维护监视的fd,查询效率稳定
    fd就绪后,使用双向链表实现的队列,维护就绪链表,存 就绪状态的epitem,一个 epitem 对应 一个fd

refer:
https://cloud.tencent.com/developer/article/1857255
https://blog.csdn.net/qq_67569905/article/details/132979203

标签:io,用户,阻塞,fd,内核,IO,linux,就绪,浅析
From: https://www.cnblogs.com/charler/p/18440046

相关文章

  • COMP 412 Local Register Allocation Table of Contents
    COMP412,Fall2024Lab2:LocalRegisterAllocationTableofContentsCriticalDatesfortheProjectIntroductionCodeDueDate10/23/2024OverviewoftheProblemCodeCheck#1Due10/04/2024CodeSpecification3IntroductionInthisprogrammingass......
  • 音频格式转换软件 Coolutils Total Audio Converter 序列号
    CoolutilsTotalAudioConverter,音频转换器,可以将音频文件转换为WAV,MP3,OGG,WMA,APE,FLAC,MP4,AAC,MPC等音频格式。支持将CD转换无损格式,CUE分割APE和FLAC文件、自动化批量转换。该版本已内置序列号,可以使用全部功能。软件截图:使用说明:1、将压缩文件解压到固定......
  • AI绘画爆款治愈系创作,你还不知道?Stable Diffusion 轻松复刻某书爆款动漫卡通治愈文案
    前言情感治愈类一直是受众群体很高非常火爆的赛道,老徐也关注到在某书平台上,漫画治愈类风格的内容也是非常的受欢迎。先来看看以下一些案例看看这几个账号内容的质量就可以看出该部分内容是很受欢迎的,结合平台的用户群体成分,老徐觉得这个是非常值得尝试的一个创作赛道。......
  • CF1648D Serious Business题解
    题目链接关键:DP状态的设计\(dp[i]\)表示走到\((2,i)\)的最小价值。转移分类讨论只用一个区间\(i\)从\([li,x]\)选择位置向下拐\(dp[i]=max_{li\lek\lex}(sum[1][k]+sum[2][x]-sum[2][k-1]+v[i])\)使用别的区间显然转移点小于\(li\),不然用一个区间即可。\(dp[i]=max_......
  • 吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.5-2.
    目录第四门课卷积神经网络(ConvolutionalNeuralNetworks)第二周深度卷积网络:实例探究(Deepconvolutionalmodels:casestudies)2.5网络中的网络以及1×1卷积(NetworkinNetworkand1×1convolutions)2.6谷歌Inception网络简介(Inceptionnetworkmotivation)......
  • Linux应急响应技巧整理
    吉祥知识星球http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247485367&idx=1&sn=837891059c360ad60db7e9ac980a3321&chksm=c0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene=21#wechat_redirect《网安面试指南》http://......
  • The 2023 ICPC Asia Jinan Regional Contest (The 2nd Universal Cup. Stage 17: Jina
    赛时4题,策略重大失误,g题思路假了但是以为是代码问题硬调3.5h,m题本来是可以过的,e是网络流说不定也能过呢。xixike大力平衡树直接打过k题省去思考双优先队列算法的时间,太强A观察到同级同形状括号如果有四个就一定可以交换顺序,而且是充要的,经典括号匹配用栈存储就过了,我代码比较丑......
  • ERA5降雨(Total Precipitation)全球逐小时数据下载
    今年暴雨也挺多的,下了ERA5所有数据想进行分析极端暴雨,过程中遇到很多问题。数据量实在太多,ERA5全球数据需要一个月一个月逐个下载,所以也参考了网上的大佬们的代码,改编了一下,这里分享一下每个月下载的代码,因为传输过程随时可能中断,所以最好用个try反复一下,但本人的python还......
  • 第2天:熟悉Android Studio补充材料——`activity_main.xml`解读
    下面是对“第2天:熟悉AndroidStudio”该文学习的更深层次的补充材料,对activity_main.xml文件的理解。下面对activity_main.xml文件中每一行进行详细解释:<?xmlversion="1.0"encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="ht......
  • 第2天:熟悉Android Studio
    欢迎来到第2天的Android编程教程!今天,我们将深入了解AndroidStudio的界面,学习如何创建你的第一个“KotlinHelloWorld”项目,了解项目结构,并在模拟器或真机上运行你的应用程序。本教程代码下载地址HelloWorldApp学习目标通过今天的学习,你将能够:熟悉AndroidStudio的主......