Reactor Core

本文从以下介绍下 Reactor (反应堆)

1
2
3
4
5
首先简单介绍Reactor 是什么东西、
其次解决什么问题、
领域应用、
原理、
优点和缺点、

1、简介

image.png

2、解决问题

image.png

3、领域应用

举个比较熟悉的例子 dubbo
dubbo底层使用了netty线程模型 netty 中使用了reactor模式

{———-}

那么什么是reactor模式?

image.png

Reactor三种模型

image.png

Netty线程模型

image.png

Netty结构

image.png

dubbo中使用的netty

image.png

4、Reactor 原理介绍

4.1 Reactor模式结构

image.png

image.png

4.2Reactor模式模块之间的交互

image.png

image.png

image.png

image.png

5、 Reactor优点

Reactor An Object Behavioral Pattern for Demultiplexing and Dispatching Handles for Synchronous Events
解耦、提升复用性、模块化、可移植性、事件驱动、细力度的并发控制等。
相比 传统的实现、即线程的切换、同步、数据的移动会引起性能问题。也就是说从性能的角度上,它最大的提升就是减少了性能的使用,即不需要每个Client对应一个线程

关于 减少使用线程使用 对性能提升的影响 可看这篇论文

SEDA: Staged Event-Driven Architecture - An Architecture for Well-Conditioned, Scalable Internet Service

对随着线程的增长带来性能降低做了一个统计:

image.png

在这个统计中,每个线程从磁盘中读8KB数据,每个线程读同一个文件,因而数据本身是缓存在操作系统内部的,即减少IO的影响;所有线程是事先分配的,不会有线程启动的影响;所有任务在测试内部产生,因而不会有网络的影响。该统计数据运行环境:Linux 2.2.14,2GB内存,4-way 500MHz Pentium III。从图中可以看出,随着线程的增长,吞吐量在线程数为8个左右的时候开始线性下降,并且到64个以后而迅速下降,其相应事件也在线程达到256个后指数上升。即1+1<2,因为线程切换、同步、数据移动会有性能损失,线程数增加到一定数量时,这种性能影响效果会更加明显。

6.Reactor模式的缺点

image.png