美文网首页
阅读 大话Netty线程模型和Reactor模式

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

作者: 日落_3d9f | 来源:发表于2019-12-31 11:43 被阅读0次

讲解reactor模式 和 Netty线程模型

设计模式

Reactor模式(反应器设计模式),是一种基于事件驱动的设计模式,在事件驱动的应用中,将一个或多个客户的服务请求分离(demultiplex)和调度(dispatch)给应用程序。在事件驱动的应用中,同步地、有序地处理同时接收的多个服务请求 一般出现在高并发系统中,比如Netty,Redis等。

优点

  • 1)响应快,不会因为单个同步而阻塞,虽然Reactor本身依然是同步的;
  • 2)编程相对简单,最大程度的避免复杂的多线程及同步问题,并且避免了多线程/进程的切换开销;
  • 3)可扩展性,可以方便的通过增加Reactor实例个数来充分利用CPU资源;

缺点

  • 1)相比传统的简单模型,Reactor增加了一定的复杂性,因而有一定的门槛,并且不易于调试。

  • 2)Reactor模式需要系统底层的的支持,比如Java中的Selector支持,操作系统的select系统调用支持。

通俗理解

KTV例子 前台接待,服务人员带领去开机器

Reactor模式基于事件驱动,适合处理海量的I/O事件,属于同步非阻塞IO(NIO)

Reactor单线程模型(比较少用)

内容:

  • 1)作为NIO服务端,接收客户端的TCP连接;作为NIO客户端,向服务端发起TCP连接;

  • 2)服务端读请求数据并响应;客户端写请求并读取响应

使用场景:

Reactor单线程模型

对应小业务则适合,编码简单;对于高负载、大并发的应用场景不适合,一个NIO线程处理太多请求,则负载过高,并且可能响应变慢,导致大量请求超时,而且万一线程挂了,则不可用了

Reactor多线程模型

内容:

一个Acceptor线程,一组NIO线程,一般是使用自带的线程池,包含一个任务队列和多个可用的线程

使用场景:

Reactor多线程模型

可满足大多数场景,但是当Acceptor需要做复杂操作的时候,比如认证等耗时操作,再高并发情况下则也会有性能问题

Reactor主从线程模型

内容:

Acceptor不在是一个线程,而是一组NIO线程(BossGroup);IO线程也是一组NIO线程(WorkGroup),这样就是两个线程池去处理接入连接和处理IO

使用场景:

Reactor主从线程模型

满足目前的大部分场景,也是Netty推荐使用的线程模型。

为什么Netty使用NIO而不是AIO,是同步非阻塞还是异步非阻塞?

答案:

在Linux系统上,AIO的底层实现仍使用EPOLL,与NIO相同,因此在性能上没有明显的优势

Netty整体架构是reactor模型,采用epoll机制,所以往深的说,还是IO多路复用模式,所以也可说netty是同步非阻塞模型(看的层次不一样)

很多人说这是netty是基于Java NIO 类库实现的异步通讯框架

特点:异步非阻塞、基于事件驱动,性能高,高可靠性和高可定制性。

参考资料:https://github.com/netty/netty/issues/2515

相关文章

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

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

  • Nety线程模型2(Accept篇)

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

  • Netty 线程模型

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

  • 浅谈 Netty 的 Reactor 线程模型

    在聊 Netty 的 Reactor 线程模型之前,咱们需要对 Reactor 线程模型有一个基本的认识。 【Wi...

  • Netty线程模型

    概述 Netty是一个高性能网络通信框架,其高性能和采用的线程模型密切相关。Netty采用Reactor模式,Re...

  • Netty源码分析-线程模型

    关于Netty线程模型的文章特别多,其中也有讲的非常好的。Netty线程模型的核心在于其如何实现Reactor模型...

  • 13 netty的Reactor线程模型及ServerBootS

    1 Netty的Reactor线程模型 上面提到的几种线程模型,在我们编写的基于netty的应用中都有可能出现,甚...

  • Netty原理(二)Netty线程模型

    Netty 的设计主要基于主从 Reactor 多线程模式,并有一定的优化逐步递进来讲一下Netty模型 1.简单...

  • Redis 单线程模型详解

    Redis 基于 Reactor 模式来设计开发了自己的一套高效的事件处理模型 (Netty 的线程模型也基于 R...

  • Netty与Reactor 模式

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

网友评论

      本文标题:阅读 大话Netty线程模型和Reactor模式

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