系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、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函数
在时间复杂度上,有很大差距