Java学习总结(2.2.1) Netty线程模型
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高性能很重要的一个原因!
每日一句
博客分组
标签云
- 最近综合
- 情绪巨婴是什么 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