美文网首页
Netty与Reactor 模式

Netty与Reactor 模式

作者: coding400 | 来源:发表于2019-11-27 19:03 被阅读0次

前言

Netty 的线程模型是基于NIO的Selector 构建的,使用了异步驱动的Reactor 模式来构建的线程模型,可以很好的支持成百上千的 SocketChannel 连接。由于 READ/WRITE 都是非阻塞的,可以充分提升I/O线程的运行效率 ,避免了IO阻塞导致线程挂起, 同时可以让一个线程支持对多个客户端的连接SocketChannel的 READ/WRITE 操作, 从根本上解决了传统阻塞IO的一线程处理一连接的弊端。

高效率的Reactor模式

The reactor design pattern is an event handling pattern for handling service requests delivered concurrently to a service handler by one or more inputs. The service handler then demultiplexes the incoming requests and dispatches them synchronously to the associated request handlers.

来自维基百科:https://en.wikipedia.org/wiki/Reactor_pattern

(是一种为处理服务请求并发 提交到一个或者多个服务处理程序的事件设计模式。当请求抵达后,服务处理程序使用解多路分配策略,然后同步地派发这些请求至相关的请求处理程序。)

常见的reactor模式有以下三种

  • 单线程reactor
  • 多线程reactor
  • 主从reactor

一. 单线程reactor

image.png

ractor 单线程模式是指所有的I/O操作都在一个NIO线程完成,该线程的职责:

1.作为NIO服务端,接收客户端TCP连接
2.作为NIO客户端,向客户端发送TCP连接
3.READ/WRITE 客户端的请求

不过单线程的reactor 模式无法发挥多核的优势,因此对于高并发量的系统仍然存在瓶颈,主要原因如下:

  1. reactor 线程既要处理来自客户端的连接,又要处理READ/WRITE/编码/解码。即便cpu 100% 也难以满足实际场景的需求
  2. 多线程Reactor 解决了这些问题

二.多线程Reactor

image.png

reactor 多线程的实现最大的区别是拥有一个专门用来处理实际I/O 操作是线程池

优点:

  1. 拥有一个Acceptor 专门用来监听请求的I/O 类型
  2. 使用专门线程池可以提高acceptor的并发量,并且可以将同一个SocketChannel 放于同一个I/O 线程处理,同一个I/O线程可以处理多个SocketChannel的READ/WRITE事件

在大部分场景,该线程模型都能处理,但存在这样一种场景:单个Acceptor 线程 可能会因为需要监听大量的 SocketChannel 连接 或 I/O事件处理或在建立建立时需要进行安全的握手认证、黑白名单过滤,而导致出现性能瓶颈。所以这种场景下,单独一个Accceptor 会导致性能不足,便出现了第三种线程模型,主从Reactor 模型

三.主从Reactor

image.png

相比多线程reactor模型,主从reactor多线程模型拥有了一个独立处理 SocketChannel 连接的线程池,当客户端从Acceptor建立连接之后,便将该连接绑定到subreactor 线程池中的某个线程中,然后由该线程绑定客户端感兴趣的I/O事件(READ/WRITE),监听客户端连接请求,最后处理。

mainReactor : 监听 ServerSocketChannel 、建立与 SocketChannel 的连接、将完成建立连接之后的Socket 交给subReactor

subReactor : 监听SocketChannel的 I/O事件,完成编解码、相应的业务处理(默认为CPU个数)

相关文章

  • 阅读 大话Netty线程模型和Reactor模式

    讲解reactor模式 和 Netty线程模型 设计模式 Reactor模式(反应器设计模式),是一种基于事件驱动...

  • 二、跟随源码读netty

    一、Reactor模式 Netty是典型的Reactor模型结构,关于Reactor的详尽阐释,本文站在巨人的肩膀...

  • Netty与Reactor 模式

    前言 Netty 的线程模型是基于NIO的Selector 构建的,使用了异步驱动的Reactor 模式来构建的线...

  • Nety线程模型2(Accept篇)

    概述 Netty的线程模型没什么出彩的地方,旧瓶装新酒,其就是基于Reactor模式 Reactor模式结构 首先...

  • Netty源码分析(五)EventLoop

    如果说Netty的核心是它的reactor模式,那么EventLoop就是reactor的核心。通过EventLo...

  • Netty简介

    1.Netty是什么? Netty是高性能、异步事件驱动的非阻塞(NIO)Reactor模式的socket通信...

  • Netty NioEventLoop源码解读

    Netty NioEventLoop Reactor 模型 Netty实现并扩展了Reactor模型,为了更好的了...

  • Netty 线程模型

    一、单线程Reactor模式 Netty线程模型总体上可以说是Reactor模式的一种变种,我们先看看什么是Rea...

  • Redis与Reactor

    Redis与Reactor 了解了Reactor模式,那么Redis中又是怎么使用Reactor模式的呢? 首先,...

  • Netty之Reactor模式

    Netty是互联网中间件领域使用最广泛最核心的网络通信框架,几乎所有互联网中间件或者大数据领域均离不开Netty。...

网友评论

      本文标题:Netty与Reactor 模式

      本文链接:https://www.haomeiwen.com/subject/julmwctx.html