阻塞I/O模型和非阻塞I/O模型

本文深入解析了阻塞I/O模型和非阻塞I/O模型的工作原理,强调了两者在数据准备阶段的差异和数据拷贝阶段的共同点,有助于开发者理解IO操作的并发处理机制。

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

阻塞I/O模型和非阻塞I/O模型

每个连接都存在这样的readbuffer和writebuffer。

在这里插入图片描述

阻塞I/O模型

在这里插入图片描述

read的时候看readbuffer里面是否有数据,有数据说明已经准备好了,数据准备阶段就绪。如果readbuffer中没有数据,则说明数据没有准备好,需要阻塞等待。准备结束后进入数据拷贝阶段,将数据从内核空间拷贝到用户空间,完成数据拷贝阶段。

write的时候看writebuffer中的数据是否已满,数据满的时候说明数据还没准备好,需要阻塞等待writebuffer中有可写的空间,此时数据准备阶段完成。将数据从用户空间拷贝到内核空间完成数据拷贝阶段。

非阻塞I/O模型

在这里插入图片描述

非阻塞I/O模型在数据准备阶段是非阻塞的,如果数据没有准备好,则直接返回。

数据未准备就绪阶段,返回-1并且返回错误号EAGAIN EWOULDBLOCK

数据拷贝阶段,返回读到的数据大小

总结:

​ 两种模型在数据拷贝阶段都是相同的都需要阻塞等待数据拷贝的完成;但是非阻塞I/O模型在数据准备阶段会立刻返回,而阻塞模型若数据没准备好,则会一直阻塞等待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值