美文网首页
redis相关:IO多路复用

redis相关:IO多路复用

作者: skipper_shou | 来源:发表于2021-02-23 21:14 被阅读0次

    前言

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

    • 1.单线程,减少了线程切换的消耗。
    • 2.基于内存操作
    • 3.IO多路复用

    说起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的优缺点

    优点:

    • 1.BIO模型程序简单,用户线程基本不会占用CPU资源,无需线程切换。
    • 2.在并发量小的情况下适用,不必用其他复杂的IO模型来解决问题。

    缺点:

    • 1.每个连接配套一条独立的线程,在高并发的情况下,对内存、线程切换开销非常巨大。

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

    NIO的优缺点

    优点:

    • 线程非阻塞,实时性好。

    缺点:

    • 轮询的行为,毫无疑问的讲占用大量的CPU时间,系统资源利用率也会下降。

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

    异步IO模型

    优点:

    • 线程非阻塞

    缺点:

    • 需要用户程序或者内核空间做一系列事情来完成上述功能。
    • 提出时间较短,并没有非常完善的解决方案。

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

    IO多路复用

    优点:

    • 1.通过select/epoll优势,一个线程可以处理更多的连接,提高了性能,提高了能力。

    缺点:

      1. select/epoll的系统调用,其实也是BIO,也是阻塞的,而且也是通过轮询的方式。

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

    redis中IO多路复用

    redis服务器中有两类事件:

    • 文件事件:redis主进程中进行处理,主要处理客户端的连接请求和响应
    • 时间事件:fork出的子进程中进行处理,服务器定期或者周期性执行的事件,例如,rdb、aof等

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

    redis调用过程.png

    相关文章

      网友评论

          本文标题:redis相关:IO多路复用

          本文链接:https://www.haomeiwen.com/subject/rmkwaktx.html