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