Java的reactor模式_Reactor模式详解+源码实现

news/2024/2/21 10:25:13

1.Reactor模式介绍

Reactor模式是事件驱动模型,有一个或多个并发输入源,有一个Service Handler,有多个Request Handlers;这个Service Handler会同步的将输入的请求(Event)多路复用的分发给相应的Request Handler。从结构上,这有点类似生产者消费者模式,即有一个或多个生产者将事件放入一个Queue中,而一个或多个消费者主动的从这个Queue中Poll事件来处理;而Reactor模式则并没有Queue来做缓冲,每当一个Event输入到Service Handler之后,该Service Handler会主动的根据不同的Event类型将其分发给对应的Request Handler来处理。

188ef8462100

Reactor类图

该图为Reactor模型,实现Reactor模式需要实现以下几个类:

1)EventHandler:事件处理器,可以根据事件的不同状态创建处理不同状态的处理器;

2)Handle:可以理解为事件,在网络编程中就是一个Socket,在数据库操作中就是一个DBConnection;

3)InitiationDispatcher:用于管理EventHandler,分发event的容器,也是一个事件处理调度器,Tomcat的Dispatcher就是一个很好的实现,用于接收到网络请求后进行第一步的任务分发,分发给相应的处理器去异步处理,来保证吞吐量;

4)


https://www.xjx100.cn/news/663770.html

相关文章

java reactor 模式_Reactor模式

备注: 文章很长,建议收藏起来,慢慢读! 并且,持续更新中… 高薪必备1 : 《Netty Zookeeper Redis 高并发实战》 为你打造NIO、Netty 高性能底层原理知识底座 高薪必备2 : 《SpringCloud、Nginx高并发核心编程…

Reactor模式详解

在学习Reactor模式之前,我们需要对“I/O的四种模型”以及“什么是I/O多路复用”进行简单的介绍,因为Reactor是一个使用了同步非阻塞的I/O多路复用机制的模式。 I/O的四种模型 I/0 操作 主要分成两部分 ① 数据准备,将数据加载到内核缓存 ② 将内核缓存中的数据加载到用户缓存…

Reactor模式!

文章目录 Reactor模式介绍什么是Reactor模式 ?为什么使用Reactor模式 ?Reactor模式的演进过程单Reactor单线程单Reactor多线程多Reactor多线程在Netty中的应用 Reactor模式介绍 什么是Reactor模式 ? Reactor模式一般翻译为反应器模式&#…

Reactor 模式

Reactor 翻译过来的意思是「反应堆」,可能大家会联想到物理学里的核反应堆,实际上并不是的这个意思。 这里的反应指的是「对事件反应」,也就是来了一个事件,Reactor 就有相对应的反应/响应。 事实上,Reactor 模式也叫…

设计模式 - Reactor 模式

https://blog.csdn.net/saienenen/article/details/111400911 1. Reactor模式简介 Netty是典型的Reactor模型结构。Reactor模式也叫反应器模式,大多数IO相关组件如Netty、Redis在使用的IO模式。 2. 多线程 IO 的致命缺陷 最最原始的网络编程思路就是服务器用一个…

Java IO篇:什么是 Reactor 网络模型?

一、什么是 Reactor 模型: The reactor design pattern is an event handling pattern for handling service requests delivered concurrently to a service handler by one or more inputs. The service handler then demultiplexes the incoming requests and di…

佳能2545i打印机驱动安装问题

记录一个打印机驱动安装的问题,起初在佳能售后官网下载了第一个驱动Generic PCL6 -2.86这个版本,但是装上之后没有效果,就很奇怪,然后询问了同事说是下载UFRII LT这个版本的就可以,最终成功打印,由衷的的感…

C++ QT读写Microsoft Word文档基操

以下是一个简单的示例&#xff0c;演示如何使用C QT读写Microsoft Word文档&#xff1a; #include <QAxObject> #include <QDebug> void readWordDocument(QString filePath) { QAxObject* word new QAxObject("Word.Application", 0);…