Java最新Redis为什么这么快?一文带你深入理解Redis单线程分析,小白以及计算机类学生的福音

最后

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
在这里插入图片描述

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。

  • 对于cpu密集型的任务,它对cpu的利用率很高,所以不需要开更多的线程去提高cpu利用率。假如增加线程,只会引起线程的频繁切换导致本来就不够用的cpu更加不够用。所以一般是线程数 = cpu核心数 + 1

Redis的瓶颈在哪里

===============

redis基本都在进行内存io,那它的瓶颈在io上吗?

redis在网络io上使用epoll实现了一个io多路复用的reactor模型,epoll是非阻塞io,所以避免了cpu阻塞在io上,所以它不是io密集型,瓶颈不在于等待io导致cpu利用率不高,不需要多个线程来屏蔽等待io执行完成的时间。当然redis的io利用率很高,但是io利用率高并不代表它是io密集型,因为它瓶颈不在等待io上。

所以第二点

redis在网络io上使用epoll实现了一个io多路复用的reactor模型使得cpu利用率更高,浪费在io上的时间更少

redis并不需要多线程来提高cpu利用率减少io等待时间,并且单线程架构也比较容易实现,所以顺理成章就采用了单线程架构。

第三点

由于采用了单线程架构,避免了线程线程切换产生的消耗

因为一次CPU上下文的切换大概在 1500ns 左右。

从内存中读取 1MB 的连续数据,耗时大约为 250us,假设1MB的数据由多个线程读取了1000次,那么就有1000次时间上下文的切换,

那么就有1500ns * 1000 = 1500us ,我单线程的读完1MB数据才250us ,你光时间上下文的切换就用了1500us了,我还不算你每次读一点数据 的时间

那么redis是cpu密集型吗?答案是否定的。

redis也**不是cpu密集型。**大多数情况下redis机器上的cpu是很够用的。

redis的瓶颈在于内存大小和网络带宽。

如果想要更充分的利用多核cpu,可以采用多个redis实例的方法,同时为了减少线程争用,可以将实例和cpu绑定的方法。

但是如果做了CPU绑定,在rdb和aof时子进程会与父进程共享使用一个CPU。子进程重写时对单核CPU使用率通常在90%以上,父进程与子进程将产生激烈CPU竞争,极大影响Redis稳定性。(解决方法不清楚,也许多绑定一个CPU会好点?)

附录

======

DMA


DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。

典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。例如磁盘移到内存。

客户端与Redis通信的一次流程

解释说明

面试结束复盘查漏补缺

每次面试都是检验自己知识与技术实力的一次机会,面试结束后建议大家及时总结复盘,查漏补缺,然后有针对性地进行学习,既能提高下一场面试的成功概率,还能增加自己的技术知识栈储备,可谓是一举两得。

以下最新总结的阿里P6资深Java必考题范围和答案,包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~

重要的事说三遍,关注+关注+关注!

历经30天,说说我的支付宝4面+美团4面+拼多多四面,侥幸全获Offer

image.png

更多笔记分享

历经30天,说说我的支付宝4面+美团4面+拼多多四面,侥幸全获Offer

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

s/4f45ff00ff254613a03fab5e56a57acb)收录**

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>