一、redsi的IO多路复用
redis利用epoll来实现IO多路复用,将连接信息和事件放入队列中,一次放到文件事件分派器,事件分派器将事件分发给事件处理器。

IO多路复用,使用的是linux内核函数,它的使用有三种select、poll、epoll,redis使用的就是epoll进行实现。
在redis中,多个客户端同时进行连接,redis使用epoll,把各个客户端的事件放到队列中,然后又事件派发器找到对应的工作单元。IO多路复用解决就是防止一个读写导致整个进程的阻塞。
Redis服务采用Reactor的方式来实现文件事件处理器,它的组成有4个部分:
- 多个套接字
- IO多路复用程序
- 文件事件分派器
- 事件处理器
因为文件事件分派器队列的消费是单线程的,所以redis才叫单线程模型。
IO就网络IO,复用是多个连接、复用就一个或一组线程处理TCP连接,总结一句话就是一个服务进程可以同时处理多个套接字描述符(FD)。
二、同步\异步和阻塞\非阻塞
1、同步\异步
- 同步:调用者需要等待结果,才能执行后续操作
- 异步:是指被调用者返回应答结果,先让调用者回去,然后在处理结果,完成后在通知调用者
同步、异步的讨论对象是被调用者,重点在于获得调用结果的消息通知上。
2、阻塞\非阻塞
- 阻塞:调用者一直等待切别的事情都不做,当前线程会被挂起,什么都

本文详细解析了Redis如何利用epoll实现IO多路复用,介绍了Reactor模型的组成部分,并对比了同步/异步和阻塞/非阻塞的区别。此外,还概述了Linux的五种IO模型,包括BIO、NIO、IO多路复用(如select、poll和epoll)以及信号驱动和异步IO。
最低0.47元/天 解锁文章
821

被折叠的 条评论
为什么被折叠?



