redis相关:IO多路复用

2021-02-23  本文已影响0人  skipper_shou

前言

用过redis的人,或者去面试的人被问redis的问题,基本都会了解redis特别快。
redis高校的原因:

说起IO多路复用,可以先从IO模型开始了解。

BIO

BIO是一种同步阻塞的IO模型,由用户程序线程发起请求,完成数据的复制接收。


BIO 同步阻塞IO模型.png

NIO

NIO是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,成为解决高并发与大量连接、I/O处理问题的有效方式。


NIO 同步非阻塞IO模型.png

IO多路复用

IO多路复用模型,就是通过一种新的系统调用,一个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是内核缓冲区可读/可写),内核kernel能够通知程序进行相应的IO系统调用。
目前支持IO多路复用的系统调用,有 select,epoll等等。select系统调用,是目前几乎在所有的操作系统上都有支持,具有良好跨平台特性。epoll是在linux 2.6内核中提出的,是select系统调用的linux增强版本。


IO多路复用IO模型.png

异步IO模型 AIO

在内核kernel的等待数据和复制数据的两个阶段,用户线程都不是block(阻塞)的。用户线程需要接受kernel的IO操作完成的事件,或者说注册IO操作完成的回调函数,到操作系统的内核。所以说,异步IO有的时候,也叫做信号驱动 IO 。


异步IO模型.png

多种IO模型区别

在以上多种IO模型中,各个模型有自己的特点,也有各自的优缺点。

BIO的优缺点

优点:

缺点:

综上,在简单的低并发的场景下,为了降低程序的复杂度,可以使用BIO,在高并发的场景下,不建议使用。

NIO的优缺点

优点:

缺点:

综上,可以看出,虽然具有非阻塞的特点,但是在高并发的场景下,也存在着巨大的消耗问题。单纯的使用NIO,并不建议使用。

异步IO模型

优点:

缺点:

综上,虽然从模型上看,异步IO模型在各方面综合比较来说,的确有非常大的优势,但是还在完善阶段,未来肯定会有更好的发挥作用,但是在现在的场景下,使用的还是相对较少。

IO多路复用

优点:

缺点:

综上所述,IO多路复用其实也是有阻塞的,只不过相对于一个线程维护一个连接,大大提高了性能,减少了系统的开销。
IO多路复用也是大多数框架使用的IO模型。

redis中IO多路复用

redis服务器中有两类事件:

文件事件是对套接字操作的抽象,每当一个套接字准备好执行连接应答、写入、读取、关闭等操作时,就会产生一个文件事件。
包括可读事件、可写事件。
针对套接字、文件事件、文件描述符等概念后续计划出一篇文章进行讲解。

redis调用过程.png
上一篇 下一篇

猜你喜欢

热点阅读