赞
踩
Redis线程模型主要是基于Reactor模式开发的网络事件处理器,这个处理器被称为文件事件处理器(file event handler),也就是说Redis线程模型指的就是文件事件处理器。文件事件处理器是单线程模式运行的,所以也叫单线程模型。但是通过IO多路复用机制监听多个socket,可以实现高性能的网络通信模型,又可以跟内部其他单线程的模块进行对接,保证了redis内部的线程模型的简单性。
文件事件有两种类型:读事件(AE_READABLE)、写事件(AE_WRITABLE)。
(1)AE_READABLE:主要指的是客户端发送到redis服务器的所有请求命令(包含get、set等等命令)时产生的事件。
(2)AE_WRITABLE:只要指的是redis执行完客户端发送的请求命令后,返回执行结果到客户端是产生的事件。
文件事件处理器结构包含4个部分:多个socket,IO多路复用程序,文件事件分派器,事件处理器(命令请求处理器、命令回复处理器、连接应答处理器)。
(1)多个scocket:文件事件就是对socket操作的抽象,每当一个socket 准备好执行连接accept、read、write、close等操作时,与操作相对应的文件事件就会产生。多个 socket 可能会并发产生不同的操作,每个操作又会生成对应的文件事件。
(2)I/O多路复用程序:负责各事件的监听(连接、读、写等),当有事件发生时,将对应事件放入队列中。
(3)文件事件分派器:负责接受I/O多路复用程序传递过来的文件事件,并根据文件事件关联的事件处理器,将该事件分派给对应的事件处理器去处理。
(4)事件处理器:
(1)连接流程:
(2)命令执行流程:
优点:
(1)模型比较简单,所有的处理过程都在一个连接,避免多线程同步机制的开销。
(2)只用一个主线程来处理,可以有效的避免多线程上下文切换带来的损耗。
(3)实现上比较容易,可维护性强。
缺点:
(1)只有一个线程,连接处理和业务处理共用一个线程,无法充分利用CPU多核的优势。
(2)当流量比较大、读写事件比较耗时情况下,容易导致系统出现性能瓶颈。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。