首页 > 系统相关 >(通俗易懂)Unix/Linux上的五种IO模型

(通俗易懂)Unix/Linux上的五种IO模型

时间:2024-04-04 22:30:40浏览次数:29  
标签:异步 模型 阻塞 应用程序 Unix IO Linux 操作

接续上一节内容(通俗易懂)阻塞、非阻塞、同步、异步区别-CSDN博客,非常接地气地解释了阻塞、非阻塞、同步、异步的内容。由于内容深度具有延续性,建议看本节内容之前,先过一遍上一节内容噢~

由于最近忙于项目,拖了好久才续更这一节内容。本节,我们更深入地探讨一下Unix/Linux上的五种IO模型。

1、阻塞 blocking

这是最传统的 I/O 模型。在这种模型中,应用程序在发出 I/O 请求时会被挂起(阻塞),直到数据准备就绪并且操作完成。在此过程中,应用程序无法执行其他任何操作。如果单看这段文字不能够理解,可以看看上一节(通俗易懂)阻塞、非阻塞、同步、异步区别-CSDN博客内容。

2、非阻塞 non-blocking(NIO)

在非阻塞模型中,如果数据未准备好,I/O 操作会立即返回一个错误,而不是阻塞调用线程。这要求应用程序定期检查数据是否已经准备就绪,通常这是通过轮询完成的。这种方式可以让应用程序在等待 I/O 操作完成时执行其他任务。

3、IO复用(IO multiplexing)

I/O 复用允许应用程序同时等待多个 I/O 操作。它使用 select或 poll 或 epoll 这类系统调用,让单个进程可以监视多个文件描述符,一旦某个文件描述符就绪(例如,读操作可以不受阻塞地进行),相应的操作可以立即执行。这种模型特别适用于处理多个并发连接,而无需为每个连接使用多线程或多进程,从而减少资源消耗。我在I/O多路复用(I/O多路转接)-CSDN博客这节详细地介绍了IO复用的内容。

4、信号驱动(signal-driven)

在这种模型中,应用程序首先告诉内核在给定的文件描述符上启动一个异步操作,并让内核在数据准备就绪时发送一个信号。这时,应用程序可以继续执行其他任务,直到收到该信号,然后进行实际的 I/O 操作。这种方式减少了应用程序的 CPU 占用,因为它不需要不断检查 I/O 是否准备就绪。要注意这里的内核在第一个阶段是异步,在第二个阶段是同步!

5、异步(asynchronous)

异步 I/O 模型是最高级的 I/O 处理方式。应用程序发出 I/O 操作请求后会立即返回,继续执行其他任务。与信号驱动 I/O 不同,应用程序不需要等待信号告知数据准备就绪,内核会在整个 I/O 操作(包括数据传输)完成后通知应用程序。这样,应用程序可以不被阻塞地继续执行,直到 I/O 请求完全处理完成。对于同步和异步有不理解的,还是建议看看上一节内容噢~

标签:异步,模型,阻塞,应用程序,Unix,IO,Linux,操作
From: https://blog.csdn.net/weixin_45634782/article/details/137358653

相关文章

  • Educational Codeforces Round 157 (Rated for Div. 2) —— C题
    EducationalCodeforcesRound157(RatedforDiv.2)C.TornLuckyTicket一道经典的前缀哈希题先看代码stra[N];voidmoon(){cin>>n;eps(i,1,n)cin>>a[i];//奇数+奇数偶数+偶数llres=0;map<pll,ll>p;map<ll,ll>pp;eps(i,1,n){res=0;for......
  • CodeForces 1942F Farmer John's Favorite Function
    洛谷传送门CF传送门考虑一些复杂度带根号的做法。考虑分块,对于一个块,我们需要处理出一个数经过这个块会变成哪个数。以下假设块长\(\ge10\)(最后一个块块长可能\(<10\),暴力处理即可)。观察这个递推式\(f_i=\left\lfloor\sqrt{f_{i-1}+a_i}\right\rfloor\),发现对于一......
  • Linux——编译链接和gcc
    1.gcc,g++,gdb安装命令行写gcc,g++,gdb根据提示安装:sudoaptinstallgcc/g++/gdb2.gcc分布编译链接(1)预编译:gcc-Emain.c-omain.i(2)编译:gcc-Smain.i-omain.s(3)汇编:gcc-cmain.s-omain.o(4)链接gccmain.o-omain执行:./main或者:全路径/mai......
  • Linux——文件查看命令 文件编辑命令
    文件查看命令(1)cat1)查看文件内容(内容较少时使用):cat文件名2)合并文件:cat文件名1文件名2>文件名33)往文件中写入数据,(Ctrl+d结束输入);(2)moremore文件名文件内容较多时用more(空格,回车往下翻,b回滚)(3)lessless文件名看完内容之后不会显示到屏幕上;(......
  • Linux华为云Hadoop配置环境
    手工搭建Hadoop环境(Linux)_弹性云服务器ECS_最佳实践(huaweicloud.com)https://support.huaweicloud.com/bestpractice-ecs/zh-cn_topic_0000001698668477.html?locale=zh-cn#ZH-CN_TOPIC_0000001698668477__li49001945163110跟着傻瓜式CV即可。气死我了!找了半天,最后在官网......
  • DNS Amplification Attack
    摘要DNSAmplificationAttack是一种基于反射的DDoS攻击,攻击者借助DNS服务器,产生更大的流量让目标服务器或网络瘫痪,从而达到拒绝服务的效果。DDoS的分类根据攻击目标和所属的层次,可以将DDoS攻击大体分为三类:针对网络带宽资源的DDoS攻击,如ICMPFlood、UPDFlood、DNSAmpli......
  • 挑战程序设计竞赛 2.6章习题 POJ 1930 Dead Fraction
    https://vjudge.csgrandeur.cn/problem/POJ-1930迈克在最后一刻拼命地赶着完成他的论文。在接下来的3天里,他需要将所有的研究笔记整理成较为连贯的形式。不幸的是,他注意到他在计算方面非常粗心。每当他需要进行算术运算时,他只是将其输入计算器,并将他认为相关的答案写下来。每当......
  • 安装Pygame过程中提示错误WARNING: Retrying…ERROR: Exception: Traceback…WARNING:
    安装Pygame过程中提示错误WARNING:Retrying…ERROR:Exception:Traceback…WARNING:Youareusingpipversion解决方案前言Pygame错误错误分析解决方案错误分析结论更新pip安装Pygame前言输入Pygame安装命令pipinstallpygame安装Pygame出错提......
  • Microservice - Distributed Transactions Based on Saga and Kafka in Practice
       ......
  • Linux常用命令
    Linux常用命令本文记录了常用命令的详细解读。列出当前目录ls列出详细信息,可以查看文件和文件夹到权限ls-al给文件和文件夹授权sudochmod-R777dataset创建文件夹mkdir复制文件夹(递归)cp-r通过SSH复制到远程服务器scp-r在linux下一般用scp这个命令来......