定义:
阻塞 I/O 是指在执行 I/O 操作时,进程会被挂起(阻塞),直到 I/O 操作完成。也就是说,当进程发出一个 I/O 请求时,程序会暂停执行,直到数据被完全读取或写入,或者直到 I/O 操作的结果返回。
阻塞 I/O 的工作流程:
- 进程发起 I/O 操作(如读取网络数据、读取文件等)。
- 操作系统会将请求交给相应的设备驱动程序或内核。
- 程序在等待 I/O 操作完成时会被挂起,不能执行其他任务,直到数据完全传输或操作完成。
- 完成后,操作系统通知程序,程序继续执行。
塞 I/O 示例:
// 使用阻塞I/O读取数据
int fd = open("file.txt", O_RDONLY);
char buffer[256];
ssize_t n = read(fd, buffer, sizeof(buffer));
// 阻塞,直到读取完成
if (n > 0) {
// 处理读取的数据
}
else {
// 错误处理
}
优点:
- 编程模型简单,逻辑直观。
- 适用于简单的应用场景,程序执行流程顺序清晰。
缺点:
- 如果 I/O 操作需要较长时间,进程会一直被挂起,浪费 CPU 时间。这在高并发场景下尤其效率低下。
- 进程无法处理其他任务,导致资源的低效利用。