适合初学者的[JAVA]:Redis(2:I/O多路复用模型与事件派发)

目录

说明

前言

I/O多路复用模型

备注:

用户空间和内核空间:

备注:

阻塞IO:(了解)

非阻塞IO:(了解)

IO多路复用:(重点)

常见的方式有:

差异:

事件派发

说明:

Redis网络模型

总结: 


说明

本文适合刚刚学习Java的初学者,也可以当成阿岩~的随手笔记.接下来就请道友们和我一起来学习吧!

如果本文有写的不对的地方,请道友们一定要说出来,避免影响到刚刚学习Java的道友们,也让阿岩~进行更新于改进,在这里谢谢各位道友了!

前言

在上一篇中,我们已经基本对Redis有个简单的了解.但是在Redis为什么这么快的问题上所出现了I/O多路复用+事件派发.那么I/O多路复用和事件派发究竟是什么呢?

I/O多路复用模型

备注:

在了解I/O多路复用时我们需要先了解一下什么是用户空间内核空间

用户空间和内核空间:

Linux系统中一个进程使用的内存情况划分两部分:内核空间,用户空间

用户空间只能执行受限命令(Ring3),而且不能直接调用系统资源必须通过内核提供的接口来访问

内核空间可以执行特权命令(Ring0),调用一切系统资源

Linux系统为了提高IO效率,会在用户空间和内核空间都加入缓存区:

写数据时,要把用户缓冲数据拷贝到内核缓冲区,然后写入设备

读数据时,要把设备读取数据到内核缓冲区,然后拷贝到用户缓冲区

备注:

接下来道友们可以简单了解一下阻塞I/O非阻塞I/O,这样可以更加了解到I/O多路复用模型的强大与便捷

阻塞IO:(了解)

(阻塞IO就是两个阶段都必须阻塞等待)

阶段一:

用户进程尝试读取数据,此时数据尚未达到,内核需要等待数据此时用户进程也处于阻塞状态

阶段二:

数据到达并拷贝到内核缓冲区,代表已就绪.将内核数据拷贝到用户缓冲区,拷贝过程中,用户进程依然阻塞等待,拷贝完成,用户进程解除阻塞,如理数据

(在阻塞IO模型中,用户进程在两个阶段都是阻塞状态)

非阻塞IO:(了解)

(非阻塞IO就是会立即返回结果而不是阻塞用户进程)

阶段一:

用户进程尝试读取数据,此时数据还没有到达,内核需要等待数据,返回异常给用户进程,用户进程拿到error后,再次尝试读取,循环往复,直到数据就绪

阶段二:

将内核数据拷贝到用户缓存区,拷贝过程中,用户进程依然阻塞等待,拷贝完成,用户进程解除阻塞,处理数据

(非阻塞IO模型中,用户进程在第一阶段是非阻塞,第二阶段是阻塞状态.虽然是非阻塞状态,但性能并没有得到提高.而且忙等机制会防止CPU空转,CPU使用率暴增)

IO多路复用:(重点)

(利用单个线程来同时监听多个Socket,并在某个Sockert可读,可写得到通知,从而避免无效的等待,充分利用CPU资源)

阶段一

用户进程调用select,指定要监听的Socket集合,内核监听对应的多个socket,任意一个或多个socket数据就绪则返回readable,此过程中用户进程阻塞

阶段二

用户进程找到就绪的socket,依次调用recvfrom读取数据,内核将数据拷贝到用户空间,用户进程处理数据

常见的方式有:

select         poll         epoll

差异:

select和poll只会通知用户进程有socket就绪,但不确定具体是那个Socket,需要用户进程逐个遍历socket来去确认

epoll则会在通知用户进程Socket就绪的同时,把已就绪的Socket写入用户空间

事件派发

其实事件派发简单来说就是根据不同请求去进行不同的回应与返回.

说明:

现在基本已经了解到了I/O多路复用模型事件派发,接下来看一下Redis网路模型,可以更直观的了解I/O多路复用与事件派发.

Redis网络模型

总结: 

在这张图中我们可以很直观的了解到I/O多路复用+事件派发的一个机制.

当不同的客户端请求进来时,Redis会根据不同请求去进行不同的回应.同时在Redis6.0后在接收请求数据时和命令回复处理器处增加了多线程这个概念,使得整个Redis的工作效率得到了显著的性能提升.

                                                                                                                        ------阿岩~的随手笔记

预告:

在下一篇中我会将Redis常见的面试题与问题,同时包括Redis的各种模式已笔记的形式进行发布,道友们一起来学习吧!

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值