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 占用飙升,实际很少单独使用

相关推荐
蓝祁子yoky1 小时前
Qt学习日记 Day8:事件系统
1024程序员节
xianghongtao01161 小时前
04_ToM2Vec_解读报告
1024程序员节
handsome_sai1 小时前
mysql索引
sql·1024程序员节
灵境(虚幻知音)1 小时前
华为超节点系统对军事体系仿真分布式计算的需求影响与技术路线变革研究
1024程序员节
Oiiouui1 小时前
针对Godot-GridGame(网格游戏)的DI注入+RefCounted数据驱动信号流架构设计的研究(全程开源)
游戏·游戏引擎·godot·1024程序员节
坤坤子吖1 小时前
C++继承:友元、静态成员、多继承与组合
开发语言·c++·笔记·学习·1024程序员节
科学熊1 小时前
OBS Studio 新手入门
1024程序员节
贵州诚鑫致达科技有限公司1 小时前
PHP两个9.2分RCE漏洞,速查版本
服务器·php·1024程序员节
漫天转悠2 小时前
Vue3白屏排查实录-Transition与多根模板
vue.js·1024程序员节