目录

一. 《Scalable IO In Java》 是什么?

二. IO架构的演变历程

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》的更多相关文章

  1. 一文弄懂-Netty核心功能及线程模型

    目录 一. Netty是什么? 二. Netty 的使用场景 三. Netty通讯示例 1. Netty的maven依赖 2. 服务端代码 3. 客户端代码 四. Netty线程模型 五. Netty ...

  2. 一文弄懂-BIO,NIO,AIO

    目录 一文弄懂-BIO,NIO,AIO 1. BIO: 同步阻塞IO模型 2. NIO: 同步非阻塞IO模型(多路复用) 3.Epoll函数详解 4.Redis线程模型 5. AIO: 异步非阻塞IO ...

  3. 《Scalable IO in Java》笔记

    Scalable IO in Java http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf 基本上所有的网络处理程序都有以下基本的处理过程:Read reque ...

  4. 【精尽Netty源码解析】1.Scalable IO in Java——多Reactor的代码实现

    Java高伸缩性IO处理 在Doug Lea大神的经典NIO框架文章<Scalable IO in Java>中,具体阐述了如何把Reactor模式和Java NIO整合起来,一步步理论结 ...

  5. Netty Reator(二)Scalable IO in Java

    Netty Reator(二)Scalable IO in Java Netty 系列目录 (https://www.cnblogs.com/binarylei/p/10117436.html) Do ...

  6. 一文弄懂神经网络中的反向传播法——BackPropagation【转】

    本文转载自:https://www.cnblogs.com/charlotte77/p/5629865.html 一文弄懂神经网络中的反向传播法——BackPropagation   最近在看深度学习 ...

  7. Scalable IO in Java

    Scalable IO in Java http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf 大部分IO都是下面这个步骤, Most have same basi ...

  8. 《Scalable IO in Java》译文

    <Scalable IO in Java> 是java.util.concurrent包的作者,大师Doug Lea关于分析与构建可伸缩的高性能IO服务的一篇经典文章,在文章中Doug L ...

  9. 学习 Doug Lea 大神写的——Scalable IO in Java

    学习 Doug Lea 大神写的--Scalable IO in Java 网络服务 Web services.分布式对象等等都具有相同的处理结构 Read request Decode reques ...

随机推荐

  1. LeetCode542 01矩阵

    给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 0 0 ...

  2. 获取json格式的数据变成了undefined!?

    今天在做一个简单的登陆功能时,当一切准备就绪,点击登陆时,什么都没发生..然后开始debug,打断点调试,然后发现了这个.向页面传递数据flag是true代表该用户的账号密码验证码等信息正确可以登录, ...

  3. Openstack 启动一个实例(九)

    Openstack 启动一个实例(九) 创建一个提供者网络: # 创建一个提供者网络: openstack network create --share --external --provider-p ...

  4. Java并发/多线程-CAS原理分析

    目录 什么是CAS 并发安全问题 举一个典型的例子i++ 如何解决? 底层原理 CAS需要注意的问题 使用限制 ABA 问题 概念 解决方案 高竞争下的开销问题 什么是CAS CAS 即 compar ...

  5. 面试时通过volatile关键字,全面展示线程内存模型的能力

    面试时,面试官经常会通过volatile关键字来考核候选人在多线程方面的能力,一旦被问题此类问题,大家可以通过如下的步骤全面这方面的能力.     1 首先通过内存模型说明volatile关键字的作用 ...

  6. Databricks 第8篇:把Azure Data Lake Storage Gen2 (ADLS Gen 2)挂载到DBFS

    DBFS使用dbutils实现存储服务的装载(mount.挂载),用户可以把Azure Data Lake Storage Gen2和Azure Blob Storage 账户装载到DBFS中.mou ...

  7. JCO RFC destination

    一:登陆PI的GUI,进入事物SM59,创建T类型RFC destinations如下: AI_RUNTIME_JCOSERVER  :used for the mapping runtime, va ...

  8. 对于Update Function Modules的一点说明

    To be able to call a function module in an update work process, you must flag it in the Function Bui ...

  9. Poj-P3468题解【线段树】

    本文为原创,转载请注明:http://www.cnblogs.com/kylewilson/ 题目出处: http://poj.org/problem?id=3468 题目描述: 给N个数A1, A2 ...

  10. centos7 开放指定端口

    centos7 开放指定端口 #开放8080端口 firewall-cmd --zone=public --add-port=8080/tcp --permanent #重载防火墙 firewall- ...