目录

一. 《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. SpringBoot配置文件(2)

    六.配置文件加载 SpringBoot 启动会扫描以下位置的application.properties或者application.yml文件作为SpringBoot的默认配置文件 file:./co ...

  2. java8新特性之stream流

    Stream 流是 Java 8 提供给开发者一套新的处理集合的API,他把我们将要处理的集合作为流,就像流水线一样,我们可以对其中的元素进行筛选,过滤,排序等中间操作,只不过这种操作更加简洁高效. ...

  3. 天梯赛练习 L3-016 二叉搜索树的结构 (30分)

    题目分析: 用数型结构先建树,一边输入一边建立,根节点的下标为1,所以左孩子为root*2,右孩子为root*2+1,输入的时候可用cin输入字符串也可用scanf不会超时,判断是否在同一层可以判断两 ...

  4. selenium爬虫 | 爬取疫情实时动态(二)

    '''@author:Billie更新说明:1-28 17:00 项目开始着手,spider方法抓取到第一条疫情数据,save_data_csv方法将疫情数据保存至csv文件1-29 13:12 目标 ...

  5. 【Problems】:JSON parse error: Invalid UTF-8 start byte 0xbd;

    简单记录一下 ,我本地开发环境这样写测试时没有问题, @ApiOperation(value="取消关注") @PostMapping("cancelFollow&quo ...

  6. 【Oracle】查看当前连接数和最大连接数

    查看当前数据库连接数 select count(*) from v$session where username is not null; select count(*) from v$process ...

  7. Windows环境下搭建FTP服务器

    Windows主机建立FTP服务器 第一步:启用对应的Windows功能 控制面板 选择启用或关闭Windows功能 勾选FTP服务器和Web管理工具 可能出现的问题 系统提示无法安装IIS和FTP服 ...

  8. Linux更换软件源

    1. Ubuntu16.04 sudo cp /etc/apt/sources.list /etc/apt/sources_origin.list # 备份 sudo gedit /etc/apt/s ...

  9. (03)-Python3之--元组(tuple)操作

    1.定义 元组的关键字:tuple 元组以()括起来,数据之间用 , 隔开.元组当中的数据,可以是任意类型.数值是可以重复的. 元组元素是 不可变的,顺序是 有序的. 例如: b = ("萝 ...

  10. ubuntu 更改U盘设备分区/dev/sdb4 标识

    备份u盘分区表 代码: sudo sfdisk -d /dev/sdb > sdb_table 修改sdb_table文件 代码: gedit sdb_table 恢复u盘分区表 代码: sud ...