IO多路复用 && Redis网络模型
1.阻塞与非阻塞都会造成cpu的浪费
2.IO多路复用的实现思想
2.1 前置知识 文件描述符FD:
当一个进程在 Linux 中打开一个文件(比如 open(“a.txt”)),内核并不会直接把文件内容“交给你”。
1 | 内核会先在<span style='font-weight:bold;background:yellow;mso-highlight:yellow'>内核空间</span><span style='background:yellow;mso-highlight:yellow'>维护一个文件表(file table)</span>, |
然后,内核给你的进程返回一个整数(0、1、2、3、…)——这就是文件描述符。
2.2
3.常见的实现方法
3.1 select实现
3.2poll实现
3.3 epoll
3.4 总结select,poll,epoll
- 事件通知机制
4.1 前置知识
惊群: 多个线程同时监听一个epoll实例.
当该epoll实例存在fd准备好时,内核会通知所有监听该实例的线程,
,但是只有一个线程能拿到该实例,其他线程白白被唤醒,造成资源浪费.
而LT会反复通知,惊群发生概率高,ET只通知一次, 概率小

5.
6.
| 6.1 | 信号驱动IO : 发送sigio等待数据,好了就recvfrom拷贝 |
|---|---|
| 此处recvfrom是数据拷贝函数 | |
![]() |
| 6.2 | 异步IO: 发送read, 等待数据并且copy好, 直接一条龙返回 |
|---|---|
![]() |
6.3 判断异步还是同步
阻塞和非阻塞, 同步和异步

