一文弄懂-《Scalable IO In Java》
目录
1. Classic Service Designs 经典服务模型
2. Event-driven Designs 事件驱动模型
3. Basic Reactor Design 最基本的响应设计
4. Worker Thread Pools:工作线程池模型
5. Using Multiple Reactors:多响应器模型
6. 文档后面讲解的buffer ByteBuffer channel Selector SelectionKey 其实就是整个NIO或者Netty 设计的核心
一. 《Scalable IO In Java》 是什么?
《Scalable IO In Java》 是java.util.concurrent包的作者,java界大师Doug Lea , 这是一篇关于分析和构建高性能的IO架构的文章。Netty/Mina 等高性能IO框架使用这种基于Reactor响应编程的框架,读懂这篇文档,有助于Netty/Mina服务框架的编程思想与设计模式
二. IO架构的演变历程
1. Classic Service Designs 经典服务模型

这个架构图其实和我上一篇文章《一文弄懂-BIO,NIO,AIO》中讲到的 BIO 同步阻塞IO模式是一样的, 每个客户端去请求服务端,服务端进行一些读写等事件的操作,然后将结果同步返回给客户端
2. Event-driven Designs 事件驱动模型

这个图可以联想到我们最初学习java的使用 用AWT开发界面,让然后为界面的每一个button绑定一个事件,这个想必学习java的同学都做过,之前我们在学校做的课程设计就是一个图书管理系统,那个就是用原生的AWT进行开发的,当点击某一个button的时候就会触发事件的执行,底层其实就是如图那样 有一个AWT线程监听的事件的发生
3. Basic Reactor Design 最基本的响应设计

这个其实就是对应着我们java中的 NIO 编程,Reactor对应着java中的selector多路复用器 dispatch其实就是对应SelectionKey,客户端对服务发送的所有事件 都会放到Selector中 然后它根据不同的事件SelectionKey 进行做相应的处理 比如 read decode encode 操作
这里的acceptor相当于单独拿出一个线程来处理连接事件,一般连接事件比较少 所以连接事件和其他事件分为两个线程去实现
4. Worker Thread Pools:工作线程池模型
上面的一种设计 还有改进的地方 就是一般非连接事件会很频繁 有可能一个线程也处理不过来,那么我们在这里可以引入线程池,如下图

这个就是一个工作线程池的图例,专门启动一个线程池去处理Reactor(Selector) 丢过来事件
5. Using Multiple Reactors:多响应器模型
相当于上面的那种架构 连接事件和其他事件 都要经过同一个Reactor, 那么为了减轻Reactor的压力 出现了下面的这种架构

我们主Reactor只处理连接事件 子Reactor来处理其他事件
6. 文档后面讲解的buffer ByteBuffer channel Selector SelectionKey 其实就是整个NIO或者Netty 设计的核心
一文弄懂-《Scalable IO In Java》的更多相关文章
- 一文弄懂-Netty核心功能及线程模型
目录 一. Netty是什么? 二. Netty 的使用场景 三. Netty通讯示例 1. Netty的maven依赖 2. 服务端代码 3. 客户端代码 四. Netty线程模型 五. Netty ...
- 一文弄懂-BIO,NIO,AIO
目录 一文弄懂-BIO,NIO,AIO 1. BIO: 同步阻塞IO模型 2. NIO: 同步非阻塞IO模型(多路复用) 3.Epoll函数详解 4.Redis线程模型 5. AIO: 异步非阻塞IO ...
- 《Scalable IO in Java》笔记
Scalable IO in Java http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf 基本上所有的网络处理程序都有以下基本的处理过程:Read reque ...
- 【精尽Netty源码解析】1.Scalable IO in Java——多Reactor的代码实现
Java高伸缩性IO处理 在Doug Lea大神的经典NIO框架文章<Scalable IO in Java>中,具体阐述了如何把Reactor模式和Java NIO整合起来,一步步理论结 ...
- Netty Reator(二)Scalable IO in Java
Netty Reator(二)Scalable IO in Java Netty 系列目录 (https://www.cnblogs.com/binarylei/p/10117436.html) Do ...
- 一文弄懂神经网络中的反向传播法——BackPropagation【转】
本文转载自:https://www.cnblogs.com/charlotte77/p/5629865.html 一文弄懂神经网络中的反向传播法——BackPropagation 最近在看深度学习 ...
- Scalable IO in Java
Scalable IO in Java http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf 大部分IO都是下面这个步骤, Most have same basi ...
- 《Scalable IO in Java》译文
<Scalable IO in Java> 是java.util.concurrent包的作者,大师Doug Lea关于分析与构建可伸缩的高性能IO服务的一篇经典文章,在文章中Doug L ...
- 学习 Doug Lea 大神写的——Scalable IO in Java
学习 Doug Lea 大神写的--Scalable IO in Java 网络服务 Web services.分布式对象等等都具有相同的处理结构 Read request Decode reques ...
随机推荐
- LeetCode542 01矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 0 0 ...
- 获取json格式的数据变成了undefined!?
今天在做一个简单的登陆功能时,当一切准备就绪,点击登陆时,什么都没发生..然后开始debug,打断点调试,然后发现了这个.向页面传递数据flag是true代表该用户的账号密码验证码等信息正确可以登录, ...
- Openstack 启动一个实例(九)
Openstack 启动一个实例(九) 创建一个提供者网络: # 创建一个提供者网络: openstack network create --share --external --provider-p ...
- Java并发/多线程-CAS原理分析
目录 什么是CAS 并发安全问题 举一个典型的例子i++ 如何解决? 底层原理 CAS需要注意的问题 使用限制 ABA 问题 概念 解决方案 高竞争下的开销问题 什么是CAS CAS 即 compar ...
- 面试时通过volatile关键字,全面展示线程内存模型的能力
面试时,面试官经常会通过volatile关键字来考核候选人在多线程方面的能力,一旦被问题此类问题,大家可以通过如下的步骤全面这方面的能力. 1 首先通过内存模型说明volatile关键字的作用 ...
- Databricks 第8篇:把Azure Data Lake Storage Gen2 (ADLS Gen 2)挂载到DBFS
DBFS使用dbutils实现存储服务的装载(mount.挂载),用户可以把Azure Data Lake Storage Gen2和Azure Blob Storage 账户装载到DBFS中.mou ...
- JCO RFC destination
一:登陆PI的GUI,进入事物SM59,创建T类型RFC destinations如下: AI_RUNTIME_JCOSERVER :used for the mapping runtime, va ...
- 对于Update Function Modules的一点说明
To be able to call a function module in an update work process, you must flag it in the Function Bui ...
- Poj-P3468题解【线段树】
本文为原创,转载请注明:http://www.cnblogs.com/kylewilson/ 题目出处: http://poj.org/problem?id=3468 题目描述: 给N个数A1, A2 ...
- centos7 开放指定端口
centos7 开放指定端口 #开放8080端口 firewall-cmd --zone=public --add-port=8080/tcp --permanent #重载防火墙 firewall- ...