> For the complete documentation index, see [llms.txt](https://bing.gitbook.io/phper/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bing.gitbook.io/phper/base/networks/io-bian-cheng/io-ding-yi.md).

# IO定义

### 理解

1. 计算机基于一个基本思想：输入产生输出，任何信息传入或传出 CPU /内存组合，例如通过从磁盘驱动器读取数据，就会被认为是 I/O
2. IO在不同层次有不同的概念和单位。一次IO就是一次请求，对于磁盘来说，一个IO就是读或者写磁盘的某个或者某段扇区，读写完了，这个IO也就结束了。

### 分类

IO有内存IO、网络IO和磁盘IO三种，通常我们说的IO指的是后两者

1. 磁盘IO主要的延时是由（以15000rpm硬盘为例）： 机械转动延时（机械磁盘的主要性能瓶颈，平均为2ms） + 寻址延时（2\~3ms） + 块传输延时（一般4k每块，40m/s的传输速度，延时一般为0.1ms) 决定。（平均为5ms）
2. 网络IO主要延时由： 服务器响应延时 + 带宽限制 + 网络延时 + 跳转路由延时 + 本地接收延时 决定。（一般为几十到几千毫秒，受环境干扰极大）

### 说明

以文件IO为例,一个IO读过程是文件数据从磁盘→内核缓冲区→用户内存的过程。同步与异步的区别主要在于数据从内核缓冲区→用户内存这个过程需不需要用户进程等待，即实际的IO读写是否阻塞请求进程。(网络IO把磁盘换做网卡即可)

### 扩展阅读

* [磁盘I/O那些事](https://www.mtyun.com/library/about-desk-io)
