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

Redis采用了一种很是简单的作法,单线程来处理来自全部客户端的并发请求,Redis把任务封闭在一个线程中从而 避免了线程安全问题;redis为何是单线程?

 官方的解释是,CPU并非Redis的瓶颈所在,Redis的瓶颈主要在机器的内存和网络的带宽。那么Redis能不能处 理高并发请求呢?固然是能够的,至于怎么实现的,咱们来具体了解一下。 【注意并发不等于并行,并发性I/O 流,意味着可以让一个计算单元来处理来自多个客户端的流请求。并行性,意味着服务器可以同时执行几个事情, 具备多个计算单元】redis

 多路复用 设计模式

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。异步

 同步和异步、阻塞和非阻塞,究竟是什么意思,感受原理都差很少,我来简单解释一下 socket

同步和异步,指的是用户线程和内核的交互方式高并发

 阻塞和非阻塞,指用户线程调用内核IO操做的方式是阻塞仍是非阻塞 

就像在Java中使用多线程作异步处理的概念,经过多线程去执行一个流程,主线程能够不用等待。

而阻塞和非阻塞 咱们能够理解为假如在同步流程或者异步流程中作IO操做,若是缓冲区数据还没准备好,IO的这个过程会阻塞。 

相关文章
相关标签/搜索