IO模型和多路复用
一、IO模型的基础理解
什么是IO?
IO全称是 Input/Output(输入/输出),在计算机科学里主要指程序与外部设备(硬盘、网络、用户终端等)进行数据交换的操作。首要特点是:
- IO通常很慢(从CPU和内存的视角看)
- 经常需要等待外部设备响应
1. 为什么要谈IO模型?
当一个程序需要读写数据(比如网络服务器接收请求,或者读取硬盘文件),操作系统必须处理这些操作的细节,尤其涉及到“等待”。
假设你的程序是单线程的,如果你直接调用阻塞IO函数,比如 read()
从网络读数据:
- 如果数据没到,程序就卡住等待,什么都干不了。
- 这样程序效率低下,不能同时处理大量IO请求。
所以应用程序和操作系统设计了不同的“IO模型”来解决这个问题:让程序更高效地处理IO,避免堵塞,能够同时处理多个客户端请求。
2. IO模型分类
常见的IO模型主要有:
- 阻塞IO(Blocking IO)
- 非阻塞IO(Non-blocking IO)
- IO复用(Multiplexing IO)
- 信号驱动IO(Signal-driven IO)
- 异步IO(Asynchronous IO)