官方的解释是,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的这个过程会阻塞。