当前位置:网站首页>io模型初探
io模型初探
2022-06-24 06:57:00 【MrPeng1991】
1.什么是IO
操作系统负责计算机的资源管理和进程调度。应用需要经过操作系统,才能做一些特殊操作,如磁盘读写,内存读写等。
应用程序要把数据写入磁盘,只能通过调用操作系统开放出来的API来操作。
应用程序在用户空间,不存在实质的io过程,真正的io在操作系统执行,应用程序发起一次IO操作包含两个阶段:
- IO调用 :应用程序向操作系统内核发起调用
- IO执行: 操作系统内核完成IO操作
操作系统内核完成IO操作还包括两个过程:
- 准备数据阶段:内核等待I/O设备准备号数据
- 拷贝数据阶段:将数据从内核缓冲区,拷贝到用户进程缓冲区
其实io就是把进程内部数据转移到外部设备,或者把外部设备的数据迁移到进程内部。外部设备一般指 硬盘,socket通讯的网卡。一个完整的io过程包括这几个步骤
- 应用向操作系统发起io调用请求
- 操作系统准备数据,把io外部设备的数据,加载到内核缓冲区
- 操作系统拷贝数据,即将内核缓冲区的数据,拷贝到用户进程缓冲区
3. IO模型
3.1 阻塞io
知道什么是io了,什么是阻塞io呢?
应用程序进程发起io调用,如果内核的数据还没有准备好的话,应用程序进程就一直在阻塞等待,一直等内核数据准备好了,从内核拷贝到用户空间,才返回成功提示,此次io操作,称之为阻塞io
缺点:内核数据一直没准备好,用户进程一直阻塞,浪费性能,
3.2 非阻塞io
内核数据没准备好,可以先返回错误信息给用户进程,让他不需要等待,而是通过轮询的方式再来请求,这就是非阻塞io
非阻塞IO的流程如下:
应用进程向操作系统内核,发起recvfrom读取数据。
操作系统内核数据没有准备好,立即返回EWOULDBLOCK错误码。
应用程序进程轮询调用,继续向操作系统内核发起recvfrom读取数据。
操作系统内核数据准备好了,从内核缓冲区拷贝到用户空间。
完成调用,返回成功提示。
即NIO,即non-blocking io,
缺点:相对于阻塞io,虽然大幅度提升性能,频繁的轮询,导致频繁的系统调用,同事会消耗大量的cpu资源,可以考零分io复用模型。
3.3 io多路复用
既然nio无效轮询导致cpu资源消耗,等我们内核数据准备好了,主动通知应用进程再去进行系统调用
文件描述符 fd File Descriptor,是计算机科学一个术语,形式上是一个非负整数,当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。
io复用模型核心思路:系统给我们提供一类函数(select poll epoll),可以同时监控多个fd操作。任何一个返回内核数据就绪,应用进程再发起recvfrom系统调用
3.3.1 多路复用之select
应用进程通过调用select函数,可以同时监控多个fd,再
3.4 信号驱动 io模型
3.5 io模型 异步io
3.6 阻塞 非阻塞 同步 异步io划分
4 BIO NIO AIO
https://baijiahao.baidu.com/s?id=1718409483059542510&wfr=spider&for=pc
边栏推荐
- Swift extension chainlayout (UI chain layout) (source code)
- JDBC 在性能测试中的应用
- 5g industrial router Gigabit high speed low delay
- 一文带你了解Windows操作系统安全,保护自己的电脑不受侵害
- Saccadenet: use corner features to fine tune the two stage prediction frame | CVPR 2020
- You get in Anaconda
- QOpenGL显示点云文件
- Auto usage example
- Teach you how to use the reflect package to parse the structure of go - step 1: parameter type check
- 51 single chip microcomputer_ External interrupt and timer / Counter interrupt
猜你喜欢
2022茶艺师(中级)上岗证题库及在线模拟考试
自动化测试的未来趋势
Swift Extension NetworkUtil(网络监听)(源码)
Solve the problem of notebook keyboard disabling failure
Swift Extension NetworkUtil(網絡監聽)(源碼)
Do you still have the opportunity to become a machine learning engineer without professional background?
C语言_字符串与指针的爱恨情仇
3D数学基础[十七] 平方反比定理
2021-03-09 COMP9021第七节课笔记
Coordinate transformation of graphic technology
随机推荐
2022年制冷与空调设备运行操作上岗证题库及模拟考试
1279_ Vsock installation failure resolution when VMware player installs VMware Tools
[data update] Xunwei comprehensively upgraded NPU development data based on 3568 development board
对于flex:1的详细解释,flex:1
2021-03-16 COMP9021第九节课笔记
Sql语句内运算问题
C# Lambda
软件过程与项目管理期末复习与重点
Phonics
论文笔记: 多标签学习 DM2L
Getting started with crawler to giving up 06: crawler play Fund (with code)
WCF TCP protocol transmission
C language_ Love and hate between string and pointer
宝塔面板安装php7.2安装phalcon3.3.2
Vulnhub target: boredhackerblog: social network
13 -- 移除无效的括号
etcd备份恢复原理详解及踩坑实录
More than observation | Alibaba cloud observable suite officially released
Simple refraction effect
不止于观测|阿里云可观测套件正式发布