redis的原理分析-Redis是单进程?性能为什么这么快

Posted 小马的学习笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis的原理分析-Redis是单进程?性能为什么这么快相关的知识,希望对你有一定的参考价值。

Redis采用了一种非常简单的做法,单线程来处理来自所有客户端的并发请求,Redis把任务封闭在一个线程中从而
避免了线程安全问题;redis为什么是单线程?
官方的解释是,CPU并不是Redis的瓶颈所在,Redis的瓶颈主要在机器的内存和网络的带宽。那么Redis能不能处
理高并发请求呢?当然是可以的,至于怎么实现的,我们来具体了解一下。 【注意并发不等于并行,并发性I/O
流,意味着能够让一个计算单元来处理来自多个客户端的流请求。并行性,意味着服务器能够同时执行几个事情,
具有多个计算单元】
多路复用
Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞
的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提
供服务,而 I/O 多路复用就是为了解决这个问题而出现的。
了解多路复用之前,先简单了解下几种I/O模型
(1)同步阻塞IO(Blocking IO):即传统的IO模型。
(2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为
NONBLOCK。
(3)IO多路复用(IO Multiplexing):即经典的Reactor设计模式,也称为异步阻塞IO,Java中的Selector和
Linux中的epoll都是这种模型。
(4)异步IO(Asynchronous IO):即经典的Proactor设计模式,也称为异步非阻塞IO。
同步和异步、阻塞和非阻塞,到底是什么意思,感觉原理都差不多,我来简单解释一下
同步和异步,指的是用户线程和内核的交互方式
阻塞和非阻塞,指用户线程调用内核IO操作的方式是阻塞还是非阻塞
就像在Java中使用多线程做异步处理的概念,通过多线程去执行一个流程,主线程可以不用等待。而阻塞和非阻塞
我们可以理解为假如在同步流程或者异步流程中做IO操作,如果缓冲区数据还没准备好,IO的这个过程会阻塞。

以上是关于redis的原理分析-Redis是单进程?性能为什么这么快的主要内容,如果未能解决你的问题,请参考以下文章

redis特点单进程单线程高性能服务器,Redis为什么是单线程?高并发响应快?

redis特点单进程单线程高性能服务器,Redis为什么是单线程?高并发响应快?

redis学习笔记--redis实现原理相关

redis学习笔记--redis实现原理相关

为什么Redis是单线程,性能还如此高?

了解redis的单线程模型工作原理?一篇文章就够了