当前位置: 首页 > news >正文

Redis单线程模式

Redis 6.0 版本之前:网络 I/O 和命令处理都是单线程

Redis 初始化的时候:

  1. 调用epoll_create()创建一个epoll对象和调用Socket()创建一个服务器socket;
  2. 调用 bind()绑定端口和调用listen()监听该socket;
  3. 调用epoll_ctl()将listen socket加入到epoll,同时注册连接事件处理函数。

初始化完成后,主线程进入一个事件循环函数while(true):

  1. 调用发送队列函数发送数据;
  2. 调用epoll_weit()函数等待事件的到来:
  • 连接事件:调用accept获取socket->调用 epoll_ctl 将已连接的 socket 加入到 epoll;
  • 如果是读事件到来,则会调用读事件处理函数,该函数会做这些事情:调用 read 获取客户端发送如果是读事件到来,则会调用读事件处理函数,该函数会做这些事情:调用 read 获取客户端发送等待发送;
  • 如果是写事件到来,则会调用写事件处理函数。

单线程模式的瓶颈

单线程的程序是无法利用服务器的多核 CPU 的,所以CPU 并不是制约 Redis 性能表现的瓶颈所在,更多情况下是受到内存大小和网络I/O的限制。

Redis 6.0 之后为什么引入了多线程

  • 为了提高网络 I/O 的并行度,Redis 6.0 对于网络 I/O 采用多线程来处理。
  • 但是Redis 仍然使用单线程来处理命令。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • stm32入门学习14-电源控制
  • vue2中使用i18n配置elementUi切换语言
  • 数学基础 -- 卷积与矩阵乘法的区别
  • 基于R语言遥感随机森林建模与空间预测;遥感数据处理与特征提取;数据分析与可视化
  • 央企数据架构师徐智确认出席「第六届数据智能高峰论坛」
  • 容器化部署ES集群
  • 得到任务式 大模型应用开发学习方案
  • 【ARM CoreLink 系列 5.5 -- CI-700 Debug trace and PMU 】
  • Elasticsearch Nested类型详解与实战
  • 中小企业文档管理最佳方案:7个热门工具
  • 漏洞复现-K26-1开源-证书查询系统-任意文件读取
  • 【Linux】多线程7——线程池
  • css如何使一个盒子水平垂直居中
  • 「项目分享」软件测试简历中项目怎么写?从候选人中脱颖而出,offer拿到手软
  • Linux~数据库账户和权限管理
  • 0基础学习移动端适配
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • ECMAScript入门(七)--Module语法
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • 笨办法学C 练习34:动态数组
  • 从零开始学习部署
  • 缓存与缓冲
  • 基于游标的分页接口实现
  • 排序(1):冒泡排序
  • 盘点那些不知名却常用的 Git 操作
  • 世界上最简单的无等待算法(getAndIncrement)
  • 我从编程教室毕业
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • FaaS 的简单实践
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​LeetCode解法汇总518. 零钱兑换 II
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (剑指Offer)面试题34:丑数
  • (蓝桥杯每日一题)love
  • (一)Neo4j下载安装以及初次使用
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • :class的用法及应用
  • @Controller和@RestController的区别?
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • []FET-430SIM508 研究日志 11.3.31
  • [20171101]rman to destination.txt
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [BUUCTF 2018]Online Tool(特详解)
  • [BZOJ] 2427: [HAOI2010]软件安装
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [C#]OpenCvSharp结合yolov8-face实现L2CS-Net眼睛注视方向估计或者人脸朝向估计
  • [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型