Netty:《Scalable IO in Java》理解与实现

2020-12-06  本文已影响0人  VincentPeng

第一次看到这篇文章,是看到上关于wiki上关于Non-blocking-IO词条中提到了这篇文章,在后面学习Netty中大家都提到了这篇文章,就抽时间理解了一下这篇文章的内容。我个人认为改文章以Java NIO api为支持,提供了Reactor模型的实现思路。适合我们在了解简单java nio的api基础上加强与业务实现的联系。

代码传送门

个人觉得代码实现过程的收获点:


单线程中的组件

TL;DR

文章首页
论述通过分解问题,找到根本问题,解决问题的路线展开

-> 把网络服务进行拆分,细化问题
-> 传统的网络服务设计
-> 可伸缩的网络服务目标
-> 引出分治法
-> 根据分治思想引出AWT以及比AWT粒度更小的事件驱动思想
-> 引出Reactor模式
-> 简单的Reactor模式满足非阻塞的网络服务实现
-> 引入Worker Thread Pool,通过细化拆解非IO部分的任务提升性能(网络IO操作与业务的拆分)
-> 引入多Reactor线程,利用资源划分,提高Reactor的利用(网络连接与网络IO操作的细化拆分)

内容翻译

大纲

大纲

网络服务

网络服务

传统服务设计结构

传统服务设计结构

传统ServerSocket 循环

每个连接在配置的线程中运行

可伸缩的指标

伸缩的指标

分治法

分治法

事件驱动

事件驱动

背景介绍:AWT中的事件处理

AWT中的事件处理

Reactor Pattern

反应器模式

Reactor

通过分发给适当的处理来响应IO事件;对比AWT线程

Handlers

提供无阻塞操作;对比AWT中的动作监听器

管理与事件绑定处理器

对比:AWT中的#addActionListener()

基础的Reactor设计,单线程模式

单线程模式

java Nio的支持

Channels

支持无阻塞的读取连接文件,socket

Buffers

像数组一样可以被直接读写Channels里

Selectors

告诉那个Channels有IO事件

SelectionKeys

负责IO事件状态和绑定

Reactor 单线程实现

第一步:创建ServerSocket,等待连接

第二步:事件的分发循环

第三步:接受连接

第四步:处理器设定

第五步:请求被处理

不同状态处理器

通过attachment 绑定合适的处理器

Reactor 多线程实现

Worker Threads

Worker Thread Pools

Worker Thread Pools

协同任务

协同任务

使用池化执行器

使用池化执行器

多Reactor线程

多Reactor线程

根据文章中实现的三种Reactor模式代码地址:
代码传送门

上一篇 下一篇

猜你喜欢

热点阅读