📚 分类
redis
🕵🏽‍♀️ 问题描述
IO模型都有哪几种(非阻塞IO)?
👨‍🏫 问题讲解
❒ 非阻塞I0的recvfrom操作会立即返回结果而不是阻塞用户进程

☪ 阶段一:
✔ 用户进程尝试读取数据(比如网卡数据)
✔ 此时数据尚未到达,内核需要等待数据
✔ 返回异常给用户进程
✔ 用户进程拿到error后,再次尝试读取
✔ 循环往复,直到数据就绪

☪ 阶段二:
✔ 将内核数据拷贝到用户缓冲区
✔ 拷贝过程中,用户进程依然阻塞等待
✔ 拷贝完成,用户进程解除阻塞,处理数据

可以看到,非阻塞10模型中,用户进程在第一个阶段是非阻塞,第二个阶段是阻塞状态。虽然是非阻塞,但性能并没有得到提高。而且忙等机制会导致CPU空转,CPU使用率暴增。
🏳️‍🌈 问题总结
✔ 采用不停的轮循,去判断是否有客户端的连接,是否有数据的收发,不需要阻塞在那一块,但是需要不停的轮循遍历,浪费系统资源。
📖 问题信息
📈 浏览次数:15 | 📅 更新时间:2025-12-04 03:45:00
📦 创建信息
🏷️ ID:22 | 📅 创建时间:2024-09-25 22:21:59