跳到主要内容

IO 编程

1. 什么是 IO

  • IOInput/Output,输入与输出。
  • 程序与运行时数据在内存中,由 CPU 执行;涉及数据交换的地方(如磁盘、网络)需要 IO 接口
  • 例:浏览器访问网页,需网络 IO:向服务器发请求Output),接收网页Input)。

2. Input 与 Output

  • 完成一次 IO 通常有 InputOutput 两个数据流;也有只有一种的:
    • 只有 Input:从磁盘读文件到内存;
    • 只有 Output:把数据到磁盘文件。

3. Stream(流)

  • Stream(流):可想象成水管,数据是水,只能单向流动
  • Input Stream:数据从外面(磁盘、网络)流进内存
  • Output Stream:数据从内存流到外面
  • 要既能发又能收(如浏览器与服务器),至少需要两根流(一根 Input、一根 Output)。

4. 速度不匹配与两种 IO 模式

  • CPU 和内存速度远高于外设(磁盘、网络),IO 存在速度严重不匹配。例:写 100M 到磁盘,CPU 输出约 0.01 秒,磁盘接收可能要 10 秒。
模式做法特点
同步 IOCPU 等待:程序暂停后续代码,等 IO 完成后再继续执行实现简单;会阻塞
异步 IOCPU 不等待:告诉外设“慢慢写”,后续代码立刻执行;IO 完成后通过回调或轮询等方式通知性能高编程模型复杂(何时通知、如何通知)
  • 区别:是否等待 IO 执行的结果。比喻:同步 = 在收银台等 5 分钟拿汉堡再去逛;异步 = 先去逛,做好了再通知你。
  • 异步 IO 性能远高于同步 IO,但复杂度高(回调、轮询等)。

小结

要点说明
IOInput/Output;内存与磁盘、网络等的数据交换
Stream流,单向;Input 外→内存,Output 内存→外
同步 IO等待 IO 完成再继续;简单,会阻塞
异步 IO不等待,后续立刻执行,完成后再通知;性能高,模型复杂
本章仅同步 IO;异步 IO 后续再讲

记忆:IO = 进(Input)出(Output);流单向;同步等结果、异步不等待;本章只讲同步。