高级IO--五种IO模型

本文详细介绍了计算机中的五种IO模型:阻塞IO、非阻塞IO、信号驱动IO、IO多路转接和异步IO,分别阐述了它们的工作原理和流程,强调了减少等待时间在提高IO效率中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、IO

1、IO介绍

I就是input输入,O就是output输出,一起就是基本输入输出设备;I/O也就是输入输出地址。每个设备都会有一个专用的I/O地址,用来处理自己的输入输出信息。I/O地址绝对不能重复,如果两个设备的I/O地址有冲突,系统硬件就不能正常工作。

2、IO模型

对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。所以说,当一个read操作发生时,它会经历两个阶段:
(1) 等待数据准备 (Waiting for the data to be ready)
(2)将数据从内核拷贝到进程中 (Copying the data from the kernel to the process)
在网络编程环境中,一次IO操作主要包括两个部分:等数据准备和搬迁数据,所以如果想要提高IO效率,就应该想办法让等的比重减少。

二、五种IO模型

正是因为IO操作的两个阶段,linux系统产生了下面五种网络模式的方案。

1、阻塞IO

在linux中,默认情况下所有的socket都是阻塞的,在内核数据准备好之前,系统调用会一直等待。具体流程如下:
这里写图片描述
(1)当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据(对于网络IO来说,很多时候数据在一开始还没有到达。比如,还没有收到一个完整的UDP包。这个时候kernel就要等待足够的数据到来)。这个过程需要等待,也就是说数据被拷贝到操作系统内核的缓冲区中是需要一个过程的。而在用户进程这边,整个进程会被阻塞(当然,是进程自己选择的阻塞)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值