首页 > 其他分享 >为什么reids是单线程

为什么reids是单线程

时间:2023-01-31 10:34:24浏览次数:37  
标签:为什么 上下文 单线程 reids 内存 多线程 CPU

我们首先要明白,reids很快,官方表示,因为reids是基于内存的操作,cpu不是reids的瓶颈,redis的瓶颈有可能是机器内存的大小或者网络带宽,既然单线程容易控制,而且cpu不会成为瓶颈,所以采用单线程。

Redis 采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由 C 语言编写,官方提供的数据是可以达到100000+ 的 QPS (每秒内查询次数)。这个数据不比采用单进程多线程的同样基于内存的 KV 数据库 Memcached 差!


Redis为什么这么快

  • 以前有个误区,以为:高性能服务器一定是多线程来实现的原因很简单因为误区而导致的:多线程一定比单线程效率高,其实不是,希望大家对cpu,内存、硬盘的速度都有了解
  • redis 核心就是 如果我的数据全都在内存里,我单线程的去操作 就是效率最高的,为什么呢,因为多线程的本质就是 CPU 模拟出来多个线程的情况,这种模拟出来的情况就有一个代价,就是上下文的切 换,对于一个内存的系统来说,它没有上下文的切换就是效率最高的。redis 用 单个CPU 绑定一块内存 的数据,然后针对这块内存的数据进行多次读写的时候,都是在一个CPU上完成的,所以它是单线程处理这个事。在内存的情况下,这个方案就是最佳方案。 因为一次CPU上下文的切换大概在 1500ns 左右。从内存中读取 1MB 的连续数据,耗时大约为 250us, 假设1MB的数据由多个线程读取了1000次,那么就有1000次时间上下文的切换,那么就有1500ns * 1000 = 1500us ,我单线程的读完1MB数据才250us ,你光时间上下文的切换就用了1500us了,我还不 算你每次读一点数据 的时间。

 

标签:为什么,上下文,单线程,reids,内存,多线程,CPU
From: https://www.cnblogs.com/boye169/p/17078158.html

相关文章

  • PEG parser——为什么python不再使用LL(1)
    Python3.9中的PEG语法分析算法0题外话若文章有后续更新,可以在我的博客上看到。pre视频在这里。1PEG:ParsingExpressionGrammar1.1定义1.1.1语法形式上,......
  • 为什么vue3要使用ref
    vue3中使用ref来创建响应式数据,让习惯了选项式API的我很不习惯。因为得使用xxx.value来读写响应式数据,没有vue2中直接使用this.xxx来读写简洁。vue3这样设计的原因是原生J......
  • python的split函数切分字符串时为什么会产生空字符串
    群里的一个小伙伴提了一个问题,他使用split函数切分字符串得到的结果里有空字符串,他对空字符串的出现感到困惑不解。text='1aa2'print(text.split('a'))#['1','',......
  • 为什么要进行网络分层
    一:网络分层的原因:因为计算机网络是一个非常复杂的系统。两台计算机之间的通信协调相当复杂。为了设计这样复杂的计算机网络,所以最早ARPANET设计计算机网络时,提出了分层的......
  • 为什么java开发平台有前途?
    在大数据时代,随着计算机应用的普及以及办公自动化的兴盛发展,提质增效的低代码开发平台迎来了快速发展时期。今天就给大家介绍java开发平台,通过本文介绍可以清楚地了解低代......
  • 为什么 Go 不支持 []T 转换为 []interface
    在Go中,如果interface{}作为函数参数的话,是可以传任意参数的,然后通过类型断言来转换。举个例子:packagemainimport"fmt"funcfoo(vinterface{}){ifv1,o......
  • 优漫动游:你知道,设计师为什么要懂数据吗?
    众所周知,互联网是一个高速发展的行业,数据时代的到来是每个人都不可小觑的未来趋势之一,它将不仅仅影响到社会生活的方方面面,也会对互联网相关的岗位分工和职责带来变化,你知......
  • 优漫动游:为什么你总学不好?零基础如何学习ui设计?
      UI设计入学门槛较低,其所见即所得,大大增强了学习中的趣味性。对于没有接触过设计的人来说,说到ui设计可能还是会感到一点陌生,不知道ui设计师到底是干嘛的?什么是ui,其实ui......
  • 快速排序:为什么右边先移动?任意枢轴值选取
    快速排序gist可运行代码Partition的含义是让某个基准元素归位排序算法——快速排序(Quicksort)基准值的三种选取和优化方法左侧基准右侧先走指针小于(严格)i<j......
  • 为什么wait()需要在同步代码块内使用
    我们还是通过源代码和代码注释来学习这个问题我们先来看看wait方法的注释,这里截取最根源的native方法给的注释Causesthecurrentthreadtowaituntileitheranother......