佛山网站设计实力乐云seo,wordpress凭密码,wordpress链接翻译,深圳公交公司官网文章目录 Redis 基于 Reactor 模式来设计开发了自己的一套高效的事件处理模型 #xff08;Netty 的线程模型也基于 Reactor 模式#xff0c;Reactor 模式不愧是高性能 IO 的基石#xff09;#xff0c;这套事件处理模型对应的是 Redis 中的文件事件处理器#xff08;file … 文章目录 Redis 基于 Reactor 模式来设计开发了自己的一套高效的事件处理模型 Netty 的线程模型也基于 Reactor 模式Reactor 模式不愧是高性能 IO 的基石这套事件处理模型对应的是 Redis 中的文件事件处理器file event handler。由于文件事件处理器file event handler是单线程方式运行的所以我们一般都说 Redis 是单线程模型。
既然是单线程那怎么监听大量的客户端连接呢
Redis 通过IO 多路复用程序 来监听来自客户端的大量连接或者说是监听多个 socket它会将感兴趣的事件及类型(读、写注册到内核中并监听每个事件是否发生。
这样的好处非常明显 I/O 多路复用技术的使用让 Redis 不需要额外创建多余的线程来监听客户端的大量连接降低了资源的消耗和 NIO 中的 Selector 组件很像。
预习一下 bio nio aio
另外 Redis 服务器是一个事件驱动程序服务器需要处理两类事件 1. 文件事件; 2. 时间事件。
时间事件不需要多花时间了解我们接触最多的还是 文件事件客户端进行读取写入等操作涉及一系列网络通信。
《Redis 设计与实现》有一段话是如是介绍文件事件的我觉得写得挺不错。 Redis 基于 Reactor 模式开发了自己的网络事件处理器这个处理器被称为文件事件处理器file event handler。文件事件处理器使用 I/O 多路复用multiplexing程序来同时监听多个套接字并根据 套接字目前执行的任务来为套接字关联不同的事件处理器。 当被监听的套接字准备好执行连接应答accept、读取read、写入write、关 闭close等操作时与操作相对应的文件事件就会产生这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件。 虽然文件事件处理器以单线程方式运行但通过使用 I/O 多路复用程序来监听多个套接字文件事件处理器既实现了高性能的网络通信模型又可以很好地与 Redis 服务器中其他同样以单线程方式运行的模块进行对接这保持了 Redis 内部单线程设计的简单性。 可以看出文件事件处理器file event handler主要是包含 4 个部分
多个 socket客户端连接IO 多路复用程序支持多个客户端连接的关键文件事件分派器将 socket 关联到相应的事件处理器事件处理器连接应答处理器、命令请求处理器、命令回复处理器