Netty原理详解系列(五)---Netty线程模型

1.概述

通过前4章的学习,已经掌握了NIO的使用以及原理。从本章开始学习Netty,它在JAVA NIO基础之上做了一层封装,把注册、选择器刷新轮询等操作封装到了Netty底层。这种封装会更利于简化使用。但同时加大了对Netty的学习理解难度。所以在进入Netty使用细节之前,必须得先了解Netty整个架构。

我们先来了解一下Reactor模型,因为就是基于该模型实现的。

2.Reactor模型

reactor设计模式是一种事件驱动模式,用于处理由一个或多个输入同时传递给服务处理程序的服务请求。然后,服务处理程序将传入的请求分解,基于多路复用并将它们同步地分派给相关的请求处理程序,Reactor 模式也叫 Dispatcher 模式。

关键有3个点:

  1. 事件驱动,也就是根据事件的不同执行不同的操作
  2. 处理一个或多个同时输入,也就是后一个输入并不会等待前一个输入的处理完成再完成处理,这样不会因为业务造成阻塞。
  3. 多路复用的分派机制,减少多余线程的使用,同时完成监听多种事件

有了对Reactor模型的初步概念,再来了解一下有哪几种Reactor模型的设计。

2.1 单Reactor单线程模型

该模型下所有请求建立、IO读写、业务处理都在一个线程中完成。如果在业务中处理中出现了耗时操作,就会导致所有请求全部处理延时。在《Netty原理详解(三)—NIO实战之心跳服务》中的例子就是该模式的实现。

在这里插入图片描述

2.2 单Reactor多线程模型

由于上面的业务处理与IO的读写是在一个线程中完成了,可能会因为业务的阻塞而导致所有请求的延时,该模型将业务从IO线程中抽离出来,利用额外的一个工作线程池来完成业务的异步处理。在《Netty原理详解(四)—NIO实战之Http服务》中的例子就是该模式的实现。

在这里插入图片描述

2.3 主从Reactor多线程模型

单React始终无法发挥现代服务器多核CPU的并行处理能力,所以Reactor是可以有个的,并且有一主多从之分。一个主Reactor仅处理连接,而多个子Reactor用于处理IO读写,然后交给线程池异步处理业务。在这种模式下,各部分的指责更加的分明。Netty就是使用的这种模式思想。

在这里插入图片描述

3.Netty线程模型

Netty采用了主从Reactor模型实现,主Reactor即对应Boss group线程组,多个子Reactor对应Worker Group线程组,线程组中的数量默认是电脑cpu核心数的两倍。Boss用于接收连接,并将建立好的连接注册到Work组,当最后IO事件触发后由对应Pipeline进行处理。

在这里插入图片描述

EventLoop

事件循环器,这里充当了Reactor的核心。每个EventLoop 都会包含一个Selector选择器,用于监听IO事件,和一个taskQueue用于存储用户提交的任务。此EventLoop会用一个独有的线程,默认是不启动的,当有任务触发时就会启动,并一直轮询下去。

在BossGroup中一般EventLoop仅有一个。bossGroup线程的机制是多路复用,虽然是一个线程但是可以监听多个新连接,不会因为一个连接没有连接成功而造成阻塞,建立连接后会创建新的管道注册到WorkGroup的NioEventLoop中,采用轮训的方式依次注册到不同的NioEventLoop当中。

这里就是主从Reactor模型的思想。Boss Group作为主Reactor负责监听客户端连接,Work Group作为从Reactor负责处理IO读写请求。

pipeline

pipeline是一个双向的链表结构,里面维护了一系列的ChannelHandler,就像责任链一样的,基于读写请求需要的相关操作,分派到不同的ChannelHandler中,通过pipeline来维护执行的逻辑关系。完成一个双向可读可写的通道。

4.后续

该编博客了解了Netty的线程模型,了解运作的机制。下一篇博客将介绍Netty的核心组件。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值