IO流:
- 程序与外部设备(文件,内存,网络,外设)之间传输数据的抽象方式。
- 数据流向:输入流(InputStream)输出流(OutputStream)
- 数据单位:字节流(二进制数据),字符流(文本数据)
网络流:
- 是IO流的具体应用场景,特指在网络通信(TCP/UDP)中,程序通过网络套接字(Socket)与远程主机之间传输数据的数据流,是跨主机的IO流。
同步IO与异步IO原理:
IO操作的完成过程分为两个核心阶段:
- 等待数据就绪:内核等待外部数据到达内核缓冲区。
- 数据拷贝:将内核缓冲区中的数据拷贝到用户进程的内核缓冲区中。
同步IO和异步IO的核心区别:在于用户进程是否需要等待这两个阶段完成。
同步IO:
用户进程发起IO操作后,必须等待IO的“等待就绪+数据拷贝”至少一个阶段完成,才能继续执行后续代码;数据拷贝阶段进程一定是阻塞的。
| 类型 | 原理 |
| 阻塞IO(BIO) | 进程调用的时候,内核若数据未就绪->进程直接阻塞,知道数据就绪+拷贝完成,才继续执行 |
| 非阻塞IO(NIO) | 进程调用的时候,内核若数据未就绪->立即返回错误,进程可做其他事,然后轮询调用,知道数据就绪完毕+拷贝完成 |
异步IO:
用户进程发起IO操作后,无需等待任务阶段,直接返回并继续执行;内核会自动完成“等待数据就绪+拷贝完成”的全部工作,完成后通过回调函数/信号主动通知进程。
非阻塞IO(AIO)