Java学习总结(2.2.1) Netty线程模型

精贴 置顶
1783 0
作者:      发布时间: 2020-04-20 09:35:49

Netty简介

Netty是一个高性能、高可扩展性的异步事作驱动的网络应用程序框架,它极大地简化了TCP和UDP客户端和服务器开发等网络编程。


Netty重要的四个内容:

1) Reactor线程模型:一种高性能的多线程程序设计思路

2) Netty中自己定义的 Channel概念:増强版的通道概念

3) Channelpipelinek职责链设计模式:事件处理机制

4)内存管理:增强的Bytebuff缓冲区



Netty整体结构图

图片来自官网,可以看出包含三大块

1、支持 Socket等多种传输方式;

2、提供了多种协议的编解码实现

3、核心设计包含事件处理模型、API的使用、 Bytebuffere的增强



为了让NIO处理更好的利用多线程特性,Nett实现了 Reactor线程模型。

Reactor模型中有四个核心概念:

1) Resources资源(请求/任务)

2) Synchronous Event Demultiplexer 同步事件复用器

3) Dispatcher分配器

4) Request Handler 请求处理器



EvnetLoopGroup 初始化过程

构造函数 -> 

 -> 确定线程数量:默认cpus*2

 -> new Executor:构建线程执行器

 -> for-newChild():构建 EventLoop

 -> new EventExecutorChooser


两组 Eventloopgroup(Main&Sub)处理不同通道不同的事件


EventLoop的启动

EventLoop自身实现了 Executor接口,当调用 executor方法提交任务时,则判断是否启动,未启动则调用内置的 executor创建新线程来触发run方法执行。


executor:请求执行任务

 -> addTadk:增加到任务队列

 -> 判断是否是EventLoop自身调用

 -> startThread->doStartThread

 -> 使用executor创建新线程执行run




Bind绑定端口过程




Channel概念

netty中的 Channell是一个抽象的概念,可以理解为对 JDK NIO Channel的增强和拓展。

增加了很多属性和方法,完整信息可以看代码注释,下面罗列几个常见的属性和方法

AbstractChannel

pipeline Defaultchannelpipeline    //通道内事件处理链路

eventloop Eventloop    //绑定的 Eventloop,用于执行操作

unsafe Unsafe    //提供I/O相关操作的封装

...

# config() ChannelConfig  //返回通道配置信息

+read() Channel  //开始读数据,触发读取链路调用

+write(Object msg) Channelfuture  //写数据,触发链路调用

+bind(SocketAddressSocketAddress) Channelfuture  //绑定

...




小结

毕竟抽象的设计模式,在学习过程中会有难懂的地方,所以着重需要结合代码理解。

此章节的目的有两个:领会 Reactor的理念、掌握代码示例中具体的写法。



Reactor多线程模式的设计,是Netty高性能很重要的一个原因!




标签:

每日一句

如果花了足够多的时间考虑你的目标,你就能用自己的心看到、摸到、尝到和闻到那个目标,你不会轻易放弃。实现目标的欲望会给你足够的毅力克服哪怕是最令人生畏的障碍。在真的取得成功之前,你应该已经在头脑中达成目标。这样你就能承受任何暂时的痛苦,实现自己的梦想。

标签云

vue
最近综合
情绪巨婴是什么 12.18
普通蛋糕做法 05.31
玉米烤肠芝士面包做法 05.31
Mysql安装教程 - 绿色版 06.18
我们学习知识为什么总是忘记呢?【学习金字塔】 05.12
Typora开发版⽆法使⽤解决⽅法 05.04
为什么无知者越自信? -- 达克效应 05.10
马斯洛需求层次理论 04.29
随机综合
论坛discuz发表主题或回帖的常用代码 10.16
Springboot安装与开始 03.08
Java学习总结(1.1.3) 线程中止 03.17
中间件1.2.1-ActiveMQ入门 04.22
Java学习总结(1.3.2) 并发容器类 04.07
中间件1.2.4-ActiveMQ持久化原理和事务机制 04.29
Java学习总结(2.2.2) 责任链模式 04.20
最常见最有效的隐藏外连代码_防seo黑帽隐藏外连代码 10.09