socket io 不使用redis_Redis这么快,线程模型竟然是单线程

Redis的线程模型记住一句话:单进程单线程,IO多路复用

c0f9af0308844a4299b5b5e94ac53fcf

单线程还这么快?

是的,你没有看错,Redis是单线程处理的。这是因为Redis的设计者认为Redis是基于内存的操作,瓶颈在内存或者网络带宽而不是CPU。这样,采用单线程反而减少了多线程间线程的切换,提高了Redis处理事件的效率。

线程模型的组成

Redis的线程模型由如下几部分组成:

  • 多个socket 
  • IO多路复用程序
  • scocket队列
  • 文件事件分配器
  • 事件处理器(连接应答处理器,命令请求处理器,命令回复处理器)
3a0edde3-06cc-47c2-b6eb-2e4fdb38193f

其中,多个 socket 会并发产生不同的操作,每个操作对应不同的文件事件。这时 IO 多路复用程序会监听多个 socket,并将 socket 产生的事件放入队列中排队,事件分派器每次从队列中取出一个事件,把该事件交给对应的事件处理器进行处理。

基于Reactor模式的事件处理

Redis基于Reactor模式,开发了网络事件处理器(文件事件处理器)。由于文件事件分派器队列的消费是单线程的,所以Redis是单线程模型。

  • 文件事件处理器使用 I/O 多路复用程序来同时监听多个套接字, 并根据套接字目前执行的任务来为套接字关联不同的事件处理器。
  • 当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关闭(close)等操作时, 与操作相对应的文件事件就会产生, 这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件。

虽然文件事件处理器以单线程方式运行, 但通过使用 I/O 多路复用程序来监听多个套接字, 文件事件处理器既实现了高性能的网络通信模型, 又可以很好地与 redis 服务器中其他同样以单线程方式运行的模块进行对接。

3e8c555d-8ebc-4000-ba47-a73b97df6a28

总结

Redis的内存模型采用单进程单线程的方式,并选择基于Reactor模式的IO多路复用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 统一处理时区_Java时区处理初学者指南

java 统一处理时区基本时间观念 大多数Web应用程序必须支持不同的时区,而正确处理时区绝非易事。 更糟糕的是,您必须确保各种编程语言(例如,前端JavaScript,中间件中的Java和作为数据存储库的MongoDB)之间的…

服务器系统装内存条,hp服务器怎么安装内存条 hp服务器内存推荐【图文】

服务器虚拟化增加了在每台惠普服务器上运行工作负载的数量,但是越来越多的计算需求则要求IT人员配备更好的HP服务器配件。因此需要对于HP服务器内存市场行情有一定的了解,而选择合适的HP服务器内存却是一件非常难的事情,今天就跟小编一起来看…

7个C语言小程序让你快速入门程序世界

1、题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。程序源代码:#include#…

去重 属性_面试中常问的List去重问题,你都答对了吗?

面试中经常被问到的list如何去重,用来考察你对list数据结构,以及相关方法的掌握,体现你的java基础学的是否牢固。我们大家都知道,set集合的特点就是没有重复的元素。如果集合中的数据类型是基本数据类型,可以直接将lis…

python paramiko模块下载_Python自动化运维实战:使用Python管理网络设备

现在,我们已经知道如何在不同的操作系统中使用和安装Python以及如何使用EVE-NG搭建网络拓扑。在本章中,我们将学习如何使用目前常用的网络自动化库自动完成各种网络任务。Python可以在不同的网络层上与网络设备进行交互。首先,Python可以通过…

cxf添加拦截器_在CXF API和拦截器中添加Gzip压缩

cxf添加拦截器如今&#xff0c;由于我们在响应中发送大量数据&#xff0c;因此必须对API响应执行Gziping。 它节省了网络带宽和交付时间&#xff0c;当然还节省了Internet上的空间。 CXF提供了以多种方式使用Gzip压缩的选项。 蓝图 注解 蓝图&#xff1a; <bean id"…

3月14日dnf服务器维护,DNF体验服3月14日更新介绍 肝深渊送爆肝王称号!

DNF体验服在3月14日更新全新活动&#xff0c;本次活动奖励总体来看还是非常不错的。例如账绑称号、异界气息清除书、锻造炉等超值奖励&#xff0c;下面让我们来看具体的更新内容吧。PS&#xff1a;本次体验服更新内容将会在3月22日更新至正式服中去。艾肯副本相关1、艾肯副本模…

C语言程序判断计算机的CPU大小端

如何判断一台计算机的CPU是大端还是小字端对齐呢&#xff1f;那么首先得了解何为大端&#xff0c;何为小端&#xff0c;明确一下概念。所谓大端模式&#xff0c;是指字数据的高字节存储在低地址中&#xff0c;而字数据的低字节则存放在高地址中。小端格式&#xff1a;与大端存储…

三角形周长最短问题_一道三角形周长最小值问题

昨天早上&#xff0c;在朋友圈里看到有朋友发了一道求三角形周长最小值的问题&#xff0c;扫了一眼&#xff0c;觉得这条题目形容臃肿&#xff0c;颜值不高&#xff0c;估计没啥意思&#xff0c;便未作深究。晚上&#xff0c;又看到有人在朋友圈中发这条题目。同一条题目反复出…

java 性能调优_Java性能调优调查结果(第二部分)

java 性能调优这是系列文章的第二篇&#xff0c;我们将分析2014年10月进行的性能调整调查的结果。如果您尚未阅读第一部分&#xff0c;我们建议从此处开始 。 第二部分将重点监视Java应用程序的性能问题。 特别是&#xff0c;我们尝试回答以下问题&#xff1a; 人们如何发现性…

西门子伺服电机选型手册_记,新入行维修电工大胆拆解伺服电机和编码器的经历...

作为一名底层维修电工&#xff0c;最怕碰到维修外置编码器的伺服电机&#xff0c;我们单位用的是西门子S120的驱动方案&#xff0c;绝大多数使用的都是西门子配套电机&#xff0c;组态简单&#xff0c;也不用我们维修&#xff0c;有问题送到西门子授权维修点维修。只有个别的使…

变频器服务器电路板维修,变频器线路板常见维修方法

(1)驱动电路损坏的原因及检查造成驱动损坏的原因有各种各样的&#xff0c;一般来说出现的问题也无非是U&#xff0c;V&#xff0c;W三相无输出&#xff0c;或者输出不平衡&#xff0c;再或者输出平衡但是在低频的时候抖动&#xff0c;还有启动报警等等。当一台变频器大电容后的…

C语言 | 输出月份的英文

“要成为绝世高手&#xff0c;并非一朝一夕&#xff0c;除非是天生武学奇才&#xff0c;但是这种人…万中无一”——包租婆这道理放在C语言学习上也一并受用。在编程方面有着天赋异禀的人毕竟是少数&#xff0c;我们大多数人想要从C语言小白进阶到高手&#xff0c;需要经历的是…

rac san+oracle_Oracle11g1+RAC+install+for+CentOS5(ASM+to+FC+SAN)_IT168文库

Wp1998gmail.comV2011.3.3.1一&#xff0e;安裝環境1.1網絡示意1.2所需軟件linux.x64_11gR1_clusterware.ziplinux.x64_11gR1_database_1013.ziporacleasmlib-2.0.4-1.el5.x86_64.rpmoracleasm-support-2.1.4-1.el5.x86_64.rpmoracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm…

中兴5250交换机配置手册_TSN工业交换机中文说明

全面了解CC-Link协议家族宣布CLPA会员公司赫斯曼推出最新研发支持TSN的工业交换机RSPE35&#xff0c;同时这款TSN交换机与三菱CC-Link IE TSN产品连接配置手册也已发布&#xff0c;并在文中附了下载。文章传送门↓可是&#xff0c;交换机的资料都是日文和英语的&#xff0c;能否…

华为桌面云 服务器可以虚拟多少,【华为桌面云】案例:单服务器环境且只有两块本地SATA盘创建虚拟机非常慢...

【关键词】&#xff1a;单服务器&#xff0c;SATA盘&#xff0c;创建虚拟机慢&#xff0c;创建VM慢【适用版本】&#xff1a;FusionAccess V100R005 /FusionSphere V100R003【问题描述】&#xff1a;某局点工程师反馈&#xff0c;他使用单台RH2288V2服务器搭建测试环境&#xf…

C语言 | 为什么写这三行代码

C语言实现Hello xiaolin#include//头文件 int main()//主函数 程序的入口 { printf("Hello xiaolin!\n");// \n是换行的意思 return 0;}编译运行结果&#xff1a;Hello xiaolin!--------------------------------Process exited after 3.326 seconds with return v…

如何分析堆外内存使用情况_堆上与堆外的内存使用情况

如何分析堆外内存使用情况总览 最近有人问我在Java中使用堆内存的好处和智慧。 面临相同选择的其他人可能会对这些答案感兴趣。 堆外内存没什么特别的。 线程堆栈&#xff0c;应用程序代码&#xff0c;NIO缓冲区都在堆外。 实际上&#xff0c;在C和C 中&#xff0c;您只有非托…

centos 虚拟机glibc升级_分享Centos6.5升级glibc过程

上次看到有同学对Centos系统 glibc升级有点疑问, 不过相对来说glibc升级还是比较简单的, 网上也有很多介绍文章, 这里整理了个安装过程供大家参考下 阅读原文场景需求默认的Centos6.5 glibc版本最高为2.12, 而在进行Nodejs开发时项目所依赖的包往往需要更高版本的glibc库支持, …

windows redis批量删除前缀的key_阿里官方Redis开发规范!

本文主要介绍在使用阿里云Redis的开发规范&#xff0c;从下面几个方面进行说明。键值设计命令使用客户端使用相关工具通过本文的介绍可以减少使用Redis过程带来的问题。一、键值设计1、key名设计可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突)&#xff0c;用冒号分隔…