IO多路复用学习(4)阻塞IO和非阻塞IO

1. IO函数和内核的关系

read从内核读缓冲区中将数据拷贝到用户空间,write把数据从用户空间拷贝到内核的写缓冲区中。
在这里插入图片描述

2. 阻塞IO和非阻塞IO

2.1 阻塞IO

在这里插入图片描述

2.2 非阻塞IO

在这里插入图片描述

2.3 区别

阻塞IO和非阻塞IO的区别在数据准备阶段。如果是阻塞IO,那么read一直等待,只到数据到达。如果是阻塞IO,那么read直接返回-1,errno被设置为EAGAIN或EWOULDBLOCK。
在数据拷贝阶段,阻塞IO和非阻塞IO是一样的,都是阻塞的,等待数据从内核空间拷贝到用户空间。
由于非阻塞IO直接返回,所以不知道数据什么时候准备好,需要主动探测,需要多次调用read读取数据。
对于阻塞IO,如果数据没有准备好,会阻塞当前线程。

3. IO多路复用与阻塞IO/非阻塞IO的关系

IO多路复用(select/poll/epoll)不进行实际的IO操作,仅在数据准备阶段提供了监测的机制。监测文件描述符是否就绪(可读或可写),从而进行实际的IO操作read或write。
对于阻塞IO,IO多路复用避免了数据准备阶段的阻塞等待。
对于非阻塞IO,IO多路复用提供了通知的机制,避免了多次read/write,提高了性能。

在这里插入图片描述

  • 网路编程流程

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值