什么是 IO
什么是 IO
程序员朱永胜有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
IO 本质解析
什么是 IO?
IO,即输入输出 (Input/Output),是计算机从外部世界获取数据并将结果返回给外部世界的过程。
IO 的工作流程
如下图所示,IO 的工作流程可以概括为以下四个主要步骤:
- 应用程序 (app) 发起 IO 请求。
- 内核 (kernel) 接收并处理 IO 请求,与外部设备交互。
- 外部设备 (如磁盘) 执行实际的读写操作。
- 数据在应用程序与外部设备之间进行传输。
1 | 应用程序 ---> 内核 ---> 外部设备 ---> 内核 ---> 应用程序 |
- 用户空间 即我们平时编写的程序所在的空间,与操作系统内核层之间有明确的界限。
- 内核空间 是操作系统的核心区域,能够直接访问硬件设备,处理复杂的任务,如 IO 操作。
IO 操作过程中,数据需要通过这两个不同的空间传递,通常需要系统调用等方式,涉及上下文切换等成本。
类型的细分
IO 根据不同的分类有不同的类型,如同步 IO 和异步 IO,块 IO 和字符 IO,还有直接 IO 和缓冲 IO 等。
同步 IO 与异步 IO:
- 同步 IO 要求应用程序在发起 IO 请求后必须等待 IO 操作完成才能继续执行。
- 异步 IO 允许应用程序在发起 IO 请求后立即执行后续操作,在 IO 完成后通过回调或者轮询的方式获取结果。
块 IO 与字符 IO:
- 块 IO 指以块(一定量的数据)为单位执行的 IO 操作,常用于硬盘等设备。
- 字符 IO 以字符为单位,常见于键盘或网络 IO。
每种类型根据应用场景的不同,选择最合适的 IO 模型是提高程序效率和用户体验的关键。