【redis】redis为什么这么快?高性能设计之epoll和I/O多路复用深度解析

文章详细探讨了I/O多路复用的概念,通过Redis的单线程模型解释其处理高并发的能力,对比了同步与异步、阻塞与非阻塞的差异,并介绍了Unix的五种I/O模型。Java的BIO和NIO也进行了分析,特别关注了select、poll和epoll这三种I/O多路复用的实现,以及它们的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录



前言

在这里插入图片描述


一、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函数
在时间复杂度上,有很大差距
在这里插入图片描述
在这里插入图片描述


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值