Java中的Reactor是什么

发布时间:2020-06-28 10:14:43

来源:亿速云

阅读:212

作者:Leah

今天就跟大家聊聊有关Java中的Reactor,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Reactor反应器模式

到目前为止,高性能网络编程都绕不开反应器模式。很多著名的服务器软件或者中间件都是基于反应器模式实现的,如Nginx、Redis、Netty。

反应器模式是高性能网络编程的必知、必会的模式。

Reactor简介

反应器模式由Reactor反应器线程、Handlers处理器两大角色组成:

(1)Reactor反应器线程的职责:负责响应IO事件,并且分发到Handlers处理器。

(2)Handlers处理器的职责:非阻塞的执行业务处理逻辑。

从上面的反应器模式定义,看不出这种模式有什么神奇的地方。当然,从简单到复杂,反应器模式也有很多版本。根据前面的定义,仅仅是最为简单的一个版本。

多线程OIO的致命缺陷

在Java的OIO编程中,最初和最原始的网络服务器程序,是用一个while循环,不断地监听端口是否有新的连接。如果有,就调用一个和处理函数来完成,示例代码如下:@Test

public void client() throws IOException {

Socket client = new Socket("127.0.0.1", 9999);

Writer writer = new OutputStreamWriter(client.getOutputStream());

writer.write("Hello World");

writer.flush();

writer.close();

client.close();

}

@Test

public void server() throws IOException {

ServerSocket server = new ServerSocket(9999);

while (true){

Socket socket = server.accept();

Reader reader = new InputStreamReader(socket.getInputStream());

print(reader);

reader.close();

socket.close();

server.close();

}

}

这种方法的最大问题是:如果前一个网络连接的handle(socket)没有处理完,那么后面的连接请求没法被接收,于是后面的请求通通会被阻塞住,服务器的吞吐量就太低了。对于服务器来说,这是一个严重的问题。

看完上述内容,你们对Java中的Reacto有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

java rector_Java中的Reactor是什么相关推荐

  1. java rector_Java IO的Reactor模式

    1.    Reactor出现的原因 Reator模式是大多数IO相关组件如Netty.Redis在使用时的IO模式,为什么需要这种模式,如何设计来解决高性能并发的呢? 最最原始的网络编程思路就是服务 ...

  2. Java反应式框架Reactor中的Mono和Flux,Java程序员必看

    由于响应流的特点,我们不能再返回一个简单的POJO对象来表示结果了.必须返回一个类似Java中的Future的概念,在有结果可用时通知消费者进行消费响应. Reactive Stream规范中这种被定 ...

  3. Java I/O中的Reactor模式

    传统I/O模式 我们之前的的I/O文章中有过如下这种图: 如上模型中,存在的问题 当并发数量很大的时候,会创建大量的线程,占用很大的系统资源 当连接创建后,如果当前线程暂时没有可以读的数据,那么改县城 ...

  4. Java的中BIO、NIO、AIO-1

    Java的中BIO.NIO.AIO-1 java  最近在项目中用到TCP通信来完成命令和运行结果的交互,用的是典型的TCP通信中的C/S架构,原因很简单:在业务需求低的环境下,这种架构简单.稳定还容 ...

  5. Java开发中Netty线程模型原理解析!

    Java开发中Netty线程模型原理解析,Netty是Java领域有名的开源网络库具有高性能和高扩展性的特点,很多流行的框架都是基于它来构建.Netty 线程模型不是一成不变的,取决于用户的启动参数配 ...

  6. Java 并发编程解析 | 如何正确理解Java领域中的多线程模型,主要用来解决什么问题?

    苍穹之边,浩瀚之挚,眰恦之美: 悟心悟性,善始善终,惟善惟道! -- 朝槿<朝槿兮年说> 写在开头 我国宋代禅宗大师青原行思在<三重境界>中有这样一句话:" 参禅之初 ...

  7. 什么是反应式编程(超详细说明),反应式编程和命令式编程的区别。如何使用Spring中的Reactor。Reactor中常用的操作。Mono和Flux。

    文章目录 一.反应式编程初探 什么是反应式编程 为什么需要反应式编程? 反应式编程的规范 二.上手反应式编程(使用Spring中的Reactor) 对比反应式编程和命令式编程代码 添加相应依赖 Mon ...

  8. 统计java文件中的代码行数

    统计Java代码行数工具类  --  CodeCounterUtil.java 统计指定目录下的java文件中代码行数  --  public static int  getCodeNumFromFo ...

  9. Java虚拟机规范阅读(二)IEEE754简介以及Java虚拟机中的浮点算法

    什么是浮点数 在计算机系统的发展过程中,曾经提出过多种方法表达实数.典型的比如相对于浮点数的定点数(Fixed Point Number).在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置 ...

最新文章

  1. nginx安装第三方模块echo
  2. [机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)
  3. 自定义jstl标签库
  4. 告诉家里做饭的人,这些食物一起吃才是大补!
  5. 八皇后问题--C语言学习笔记
  6. matlab log函数
  7. 记录mt7615e wifi 驱动移植到openwrt cc
  8. MYSQL 索引 主键 外键
  9. vue 怎么解析xml
  10. freeswitch通过 sip网关联系外部世界
  11. 杭州电子科技大学acm--2017
  12. 搞定HTML\CSS之background属性
  13. 关于word2vec词向量化
  14. django MVT模式介绍
  15. JAVA 按姓氏分类的电话薄(界面、方法的实现和讲解)
  16. 浅谈综述论文:文献综述
  17. 短视频底层实操课,让你迅速从短视频新手变成高手
  18. 用友企业空间 - http://upesn.com
  19. matlab的无穷大怎样表示_matlab中从一到无穷大怎么表示
  20. 计算机与代数---如何计算ln---方法和实现

热门文章

  1. qemu 编译 qemu-system-arm 和 qemu-system-aarch64
  2. 海神平台Crash监控SDK(Android)开发经验总结
  3. 详解cms和g1垃圾收集器
  4. 【Android -- 写作工具】Markdown 表格
  5. 基于ssm中学生错题管理系统
  6. OneData方法论-事实表设计
  7. SEO没有未来了?浅谈SEO的职业规划道路!
  8. 使用EwoMail Docker镜像 搭建邮箱服务器( 自定义mysql连接)
  9. 人工智能AI趣闻:光头请戴假发!英球赛AI摄像头只对准边裁光头,球迷错过进球,AI:我眼里只有他
  10. 51单片机中断号对应的中断类型