redis--IO 内核

一、用户空间 & 内核空间

  1. 分区原因 :隔离保护,防止应用程序破坏内核、造成系统崩溃。
    • 用户空间:Ring3,权限受限,不能直接访问硬件资源,必须通过系统调用。
    • 内核空间:Ring0,特权态,可以直接操作 CPU、内存、网卡等硬件。
  2. IO 缓冲区机制 Linux 在用户、内核两侧都设置缓冲区,减少硬件交互次数,提升 IO 效率:
    • 读:硬件 → 内核缓冲区 → 用户缓冲区
    • 写:用户缓冲区 → 内核缓冲区 → 硬件
  3. IO 的两个固定阶段(所有模型都拆成这两步) ① 等待数据就绪(内核准备好数据) ② 将数据从内核缓冲区拷贝到用户空间

二、5 种 IO 模型总览(UNIX 网络编程分类)

  • 阻塞 IO Blocking IO
  • 非阻塞 IO Nonblocking IO
  • IO 多路复用 IO Multiplexing
  • 信号驱动 IO Signal Driven IO
  • 异步 IO Asynchronous IO

三、阻塞 IO(Blocking IO)

调用recvfrom发起系统调用后,两个阶段全部阻塞:

  1. 没有数据时,进程一直阻塞等待内核数据就绪;
  2. 数据就绪后,阻塞等待内核把数据拷贝到用户空间;
  3. 拷贝完成才返回,用户进程继续执行业务。 ✅ 优点:简单、内核友好,CPU 无空转 ❌ 缺点:一个线程只能处理一个连接,并发能力差

四、非阻塞 IO(Nonblocking IO)

调用recvfrom会立刻返回,不会卡住进程:

  1. 无数据:直接返回错误码EWOULDBLOCK,用户进程循环轮询调用;
  2. 有数据:阻塞完成内核→用户空间的数据拷贝;

重点考点:仅第一阶段(等数据)非阻塞,拷贝阶段依旧阻塞 ✅ 优点:线程不会卡死,可以做别的事情 ❌ 缺点:轮询会造成 CPU 空转、CPU 占用飙升,实际很少单独使用

相关推荐
普通人66 小时前
WebGL与WebGPU入门指南
开发语言·webgl·1024程序员节
猫猫不是喵喵.1 天前
从0到1创建一个微服务项目
java·数据库·微服务·1024程序员节
fish_zzzz4 天前
笔记-论数据结构2
1024程序员节
普通人65 天前
PHP文件读写完全指南
开发语言·php·1024程序员节
Martina_03215 天前
AI生成3D场景从白模换成精模后镜头全偏了?用6步检查单位、枢轴与层级替换
图像处理·人工智能·3d·ai·自然语言处理·材质·1024程序员节
星云_byto6 天前
CSS布局
人工智能·机器学习·目标跟踪·1024程序员节
张小姐的猫9 天前
【MySQL】访问 & 数据流动原理
android·数据库·mysql·adb·1024程序员节
工业HMI实战笔记10 天前
印刷电路板HMI:SMT贴装的元件定位界面
制造·设计规范·设计语言·1024程序员节
Martina_032110 天前
AI生成3D模型一合并网格,材质就串色?用6步检查材质槽、UV与图集重映射
图像处理·人工智能·3d·材质·uv·游戏策划·1024程序员节
橙光成长10 天前
android-ad-cleaner:android免 Root 批量关闭系统开屏与营销推送
android·1024程序员节