系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、before 学习I/O多路复用之前
- 多路复用 需要解决的问题 一对一性能差
- 结论 需要让一个进程同时处理多个连接
- 二、I/O多路复用模型
- 1、是什么?
- 一句话
- 2、redis单线程如何处理那么多并发客户端连接,为什么单线程,为什么快?
- 3、参考《redis设计与实现》
- 结论
- 4、从吃米线开始,读读read
- 吃米线比喻
- 同步
- 异步
- ==同步与异步的理解==
- 阻塞
- 非阻塞
- ==阻塞与非阻塞的理解==
- 总结
- 5、Unix网络编程中的五种IO模型
- 6、Java验证
- BIO
- 演示accept
- 演示read
- 1 单线程
- 2 多线程
- BIO总结
- NIO
- 回答
- 案例code
- 存在问题和优缺点
- IO多路复用
- 是什么?
- 说人话
- 能干嘛?
- 为什么这么快?
- reactor设计模式
- select、poll、epoll都是I/O多路复用的具体实现
- select 将用户传入的数据传入到内核空间
- poll
- epoll
- 三种方法对比
- 5种I/O模型总结
- 为什么3个都保有 redis对IO多路复用函数的选择
前言

一、before 学习I/O多路复用之前
多路复用 需要解决的问题 一对一性能差

结论 需要让一个进程同时处理多个连接

二、I/O多路复用模型
1、是什么?

一句话

2、redis单线程如何处理那么多并发客户端连接,为什么单线程,为什么快?


3、参考《redis设计与实现》

结论

4、从吃米线开始,读读read

吃米线比喻


同步

异步

同步与异步的理解

阻塞

非阻塞

阻塞与非阻塞的理解

总结
四种方式

5、Unix网络编程中的五种IO模型

6、Java验证

BIO
解释



演示accept

演示read

1 单线程

单线程存在的问题

解决:多线程

2 多线程

多线程存在的问题

解决:线程池 和 NIO非阻塞

BIO总结

痛点

总结 来一个new一个线程

NIO

NIO 轮询替代阻塞

回答

案例code

存在问题和优缺点

问题升级

非阻塞IO小总结

IO多路复用

是什么?

模型

文件标识符 FD

IO多路复用


说人话

能干嘛?

为什么这么快?


reactor设计模式

是什么?



每个网络连接都对应一个文件描述符FD


select、poll、epoll都是I/O多路复用的具体实现

select 将用户传入的数据传入到内核空间
Linux官网解释 1983年左右开始

select函数执行逻辑

优点


缺点


poll

poll函数执行逻辑

解决的问题

优点

缺点、问题

epoll

三步调用 创建epoll句柄、向内核增删改要监控的文件描述符FD、类似于发起select调用

epoll函数执行的逻辑

结论

三种方法对比

5种I/O模型总结


为什么3个都保有 redis对IO多路复用函数的选择
redis建议安装在Linux上,会选择epoll函数,而其他操作系统可能会选择select函数
在时间复杂度上,有很大差距




















