我的编程空间,编程开发者的网络收藏夹
学习永远不晚

redis是单线程分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

redis是单线程分析

这篇文章主要介绍redis是单线程分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

以前一直有个误区,以为:高性能服务器  一定是 多线程来实现的

原因很简单因为误区二导致的: 多线程 一定比 单线程  效率高。其实不然。

在说这个事前希望大家都能对  CPU 、 内存 、 硬盘的速度都有了解了,这样可能理解得更深刻一点,不了解的朋友点:CPU到底比内存跟硬盘快多少

redis 核心就是 如果我的数据全都在内存里,我单线程的去操作 就是效率最高的,为什么呢,因为多线程的本质就是 CPU 模拟出来多个线程的情况,这种模拟出来的情况就有一个代价,就是上下文的切换,对于一个内存的系统来说,它没有上下文的切换就是效率最高的。

redis用单个CPU 绑定一块内存的数据,然后针对这块内存的数据进行多次读写的时候,都是在一个CPU上完成的,所以它是单线程处理这个事。在内存的情况下,这个方案就是最佳方案。(推荐:《redis视频教程》)

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

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

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

那什么时候用多线程的方案呢?

答案是:下层的存储等慢速的情况。比如磁盘

内存是一个 IOPS 非常高的系统,因为我想申请一块内存就申请一块内存,销毁一块内存我就销毁一块内存,内存的申请和销毁是很容易的。而且内存是可以动态的申请大小的。

磁盘的特性是:IPOS很低很低,但吞吐量很高。这就意味着,大量的读写操作都必须攒到一起,再提交到磁盘的时候,性能最高。为什么呢?

如果我有一个事务组的操作(就是几个已经分开了的事务请求,比如写读写读写,这么五个操作在一起),在内存中,因为IOPS非常高,我可以一个一个的完成,但是如果在磁盘中也有这种请求方式的话,

我第一个写操作是这样完成的:我先在硬盘中寻址,大概花费10ms,然后我读一个数据可能花费1ms然后我再运算(忽略不计),再写回硬盘又是10ms ,总共21ms

第二个操作去读花了10ms, 第三个又是写花费了21ms ,然后我再读10ms, 写21ms ,五个请求总共花费83ms,这还是最理想的情况下,这如果在内存中,大概1ms不到。

所以对于磁盘来说,它吞吐量这么大,那最好的方案肯定是我将N个请求一起放在一个buff里,然后一起去提交。

方法就是用异步:将请求和处理的线程不绑定,请求的线程将请求放在一个buff里,然后等buff快满了,处理的线程再去处理这个buff。然后由这个buff 统一的去写入磁盘,或者读磁盘,这样效率就是最高。 java里的 IO不就是这么干的么~

对于慢速设备,这种处理方式就是最佳的,慢速设备有磁盘,网络 ,SSD 等等,

多线程 ,异步的方式处理这些问题非常常见,大名鼎鼎的netty 就是这么干的。

终于把 redis 为什么是单线程说清楚了,把什么时候用单线程跟多线程也说清楚了,其实也是些很简单的东西,只是基础不好的时候,就真的尴尬。。。。

补一发大师语录:来说说,为何单核cpu绑定一块内存效率最高

“我们不能任由操作系统负载均衡,因为我们自己更了解自己的程序,所以我们可以手动地为其分配CPU核,而不会过多地占用CPU”,默认情况下单线程在进行系统调用的时候会随机使用CPU内核,为了优化Redis,我们可以使用工具为单线程绑定固定的CPU内核,减少不必要的性能损耗!

redis作为单进程模型的程序,为了充分利用多核CPU,常常在一台server上会启动多个实例。而为了减少切换的开销,有必要为每个实例指定其所运行的CPU。

Linux 上  taskset 可以将某个进程绑定到一个特定的CPU。你比操作系统更了解自己的程序,为了避免调度器愚蠢的调度你的程序,或是为了在多线程程序中避免缓存失效造成的开销。

以上是redis是单线程分析的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

redis是单线程分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Redis是单线程还是多线程

Redis是单线程的,即所有的操作都是由一个线程来处理的。这是因为Redis主要使用内存来存储数据,而内存访问速度非常快,所以单线程能够满足大部分的需求。此外,单线程也可以避免多线程带来的线程同步和锁的开销,提高了性能和并发能力。但是在处理
Redis是单线程还是多线程
2024-04-09

Redis选择单线程的原因是什么

本文小编为大家详细介绍“Redis选择单线程的原因是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Redis选择单线程的原因是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、Redis版本迭代Redi
2023-07-05

redis怎么使用单线程

redis 使用单线程架构,以提供高性能、简单性和一致性。它利用 i/o 多路复用、事件循环、非阻塞 i/o 和共享内存来提高并发性,但同时存在并发性受限、单点故障和不适合写密集型工作负载的局限性。Redis 如何使用单线程Redis 是
redis怎么使用单线程
2024-06-03

redis怎么解决单线程

redis 采用以下技术来解决单线程问题:1. 多路复用 i/o;2. 事件循环;3. 任务队列;4. 内存数据结构;5. 优化算法。这些技术使 redis 能够在单线程模型中高效处理并发访问,保持低延迟和高吞吐量。Redis 如何解决单线
redis怎么解决单线程
2024-05-21

redis单线程怎么理解

redis采用单线程架构,单线程的设计优点在于延迟低、简单易管理、行为可预测。为了解决单线程的性能限制,redis采用了非阻塞io、多路复用、事件循环和异步操作等优化技术。Redis 单线程的理解Redis 是一个单线程的内存数据库,这意
redis单线程怎么理解
2024-06-03

redis单节点实例分析

这篇文章主要讲解了“redis单节点实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“redis单节点实例分析”吧!1.安装jdk1.8[root@sht-sgmhadoopdn-04
2023-06-03

编程热搜

目录