在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
双线程的程序可以支持每秒几百万的请求量,众所周知,Redis 作为被广泛使用的内存数据库偏偏选择了单线程模型,这又是为什么呢?其实简单概括起来主要有以下三个原因,方便维护,可以并发的处理任务以及双线程不能解决Redis的性能瓶颈。下面我们来仔细分析一下Redis选择单线程模型的原因。
原因一:单线程模型更方便维护
相信我们都了解可维护性对一个项目的重要性,而Redis 使用单线程模型能带来更好的可维护性,方便开发和调试。如果代码难以调试和测试,问题也经常难以复现,这对于任何一个项目来说都会严重地影响项目的可维护性。多线程模型虽然在某些方面表现优异,但是它却引入了程序执行顺序的不确定性,代码的执行过程不再是串行的,多个线程同时访问的变量如果没有谨慎处理就会带来诡异的问题。而多线程带来的问题是很明显的,如果计算机中的两个进程(线程同理)同时尝试修改一个共享内存的内容,在没有并发控制的情况下,最终的结果依赖于两个进程的执行顺序和时机,如果发生了并发访问冲突,最后的结果就会是不正确的。
原因二:可以并发的处理任务。
虽然,Redis选择了单线程模型,但是这也不影响它能并发的处理客户端的请求。Redis 服务中运行的绝大多数操作的性能瓶颈都不是 CPU。用单线程模型也并不意味着程序不能并发的处理任务,Redis 虽然使用单线程模型处理用户的请求,但是它却使用 I/O 多路复用机制并发处理来自客户端的多个连接,同时等待多个连接发送的请求。在 I/O 多路复用模型中,最重要的函数调用就是 select 以及类似函数,该方法的能够同时监控多个文件描述符(也就是客户端的连接)的可读可写情况,当其中的某些文件描述符可读或者可写时,select 方法就会返回可读以及可写的文件描述符个数。使用 I/O 多路复用技术能够极大地减少系统的开销,系统不再需要额外创建和维护进程和线程来监听来自客户端的大量连接,减少了服务器的开发成本和维护成本
原因三:双线程不能解决Redis的性能瓶颈
这也是Redis选择单线程模型的最核心的原因。虽然多线程技术的能够帮助我们充分利用 CPU 的计算资源来并发的执行不同的任务,但是 CPU 资源往往都不是 Redis 服务器的性能瓶颈。哪怕我们在一个普通的 Linux 服务器上启动 Redis 服务,它也能在 1s 的时间内处理 1,000,000 个用户请求。
如果这种吞吐量不能满足我们的需求,更推荐的做法是使用分片的方式将不同的请求交给不同的 Redis 服务器来处理,而不是在同一个 Redis 服务中引入大量的多线程操作。所以Redis 并不是 CPU 密集型的服务,如果不开启 AOF 备份,所有 Redis 的操作都会在内存中完成不会涉及任何的 I/O 操作,这些数据的读写由于只发生在内存中,所以处理速度是非常快的;整个服务的瓶颈在于网络传输带来的延迟和等待客户端的数据传输,也就是网络 I/O,所以使用多线程模型处理全部的外部请求可能不是一个好的方案。
Redis选择单线程模型的原因分析就讲到这里了,综上所述,Redis选择单线程模型的好处更多,使用双线程其实是完全没有必要的。当然,以上的分析可能已经打破了大家对于单线程的固有印象,因此不是说双线程就一定比单线程好,又结合具体的实际情况来分析。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Java基础学习:面向过程与面向对象
刚开始学编程的时候都会遇到一个思维转变的过程,从原来人类思维模式转变成机器可以接受的思维模式。这个过程是非常难的,这也是为什么互联网人才能够获得高薪的原因。对于Java学习,面向过程可能更接近人的正常思维,而面向对象思维就是一个巨大的挑战了。本文就和大家聊一聊关于面向过程和面向对象的优劣。
7429
2019-06-24 18:35:01
Dubbox和Dubbo哪个好?为什么?
Dubbox和Dubbo哪个好?其实Dubbox和Dubbo都是很好的服务框架,简单来说,Dubbox和Dubbo本质上没有区别,Dubbox是Dubbo的升级版本。这样说来,好像Dubbox更好一些,为什么?毕竟它是升级的版本,扩展了Dubbo没有的内容。现在,我们来详细分析一下它们两者的区别吧!
13281
2019-08-06 10:12:07
学习Java的好书有哪些?Java书籍清单
Java书籍是程序员学习提升技能的重要学习渠道,通过书籍Java程序员可以学习当前流行、重要的相关技能。经典的书经受时间的考验,随着岁月的流逝变得越来越重要,让我们不断的学习和进步。
4966
2020-02-12 16:23:27
Lombok安装和使用介绍
在Java开发的过程中,当我们想减少重复工作提高生产效率的时候,不妨考虑一下Lombok。本文将手把手带大家下载安装Lombok,要知道使用lombok必须先安装,不然IDE则无法解析。除此之外,本文还将向大家详细介绍Lombok的定义和使用。希望帮助大家更好的掌握Lombok,提高Java开发工作的效率。
4572
2020-03-31 17:51:52
Java基础视频教程免费资源分享
Java基础视频教程免费资源分享,Java基础知识比较多,要学习Java语言核心语法、面向对象程序设计、常用API、集合框架、IO流、线程、进程、多线程、并发、并行、同步、异步、线程类常见方法、网络编程、反射技术、常用设计模式、JDK新特性等JavaSE领域的知识。
6581
2020-05-05 16:27:45