netty源码分析及优点
今天梳理了一下netty源码调用流程,整理了一下详细流程图,如下
netty流程图
netty的优点
- Reactor主从设计模型
- Nio非阻塞
- 无锁化串行
- 零拷贝(使用直接内存)
- ByteBuf内存池
- 灵活的TCP参数配置能力
- 并发优化
然后找几个解释一下,如下
Reactor主从设计模型
Netty 抽象出两组线程池BossGroup和WorkerGroup,BossGroup和WorkerGroup类型都NioEventLoopGroup,BossGroup专门负责接收客户端的连接, WorkerGroup专门负责网络的读写,bossGroup每次和客户端执创建完连接,都会(轮询)选择一个workGroup,把selectorKey注册到workGroup上NIOEventLoop的selector,所以客户端下一次进行数据交互的时候就会在workGroup上。
无锁化串行
在Netty中的无锁化串行是指数据在ChannelPipeline中执行Handler是串行执行的,不存在多线程,这样就减少了为了竞争锁带来的性能下降,我们可以通过配置NIO线程池参数来指定多个串行线程并行运行,这样的效率会更高。而且Redis也是利用这种思想来设计的。
直接内存
直接内存指的是元空间或者物理机的内存,是堆外内存。
使用直接内存的优点如下
- 不占用堆内存空间,减少了发生GC的可能
- 不需要从物理内存拷贝到堆内存(零拷贝原理)。
缺点:
- 初始分配慢
- 没有jvm管理,容易出现fullGC
零拷贝
数据在交互过程中一般需要先从socket中拷贝到物理内存,然后从物理内存在拷贝到jvm内存,处理完之后再从jvm内存拷贝到物理内存,物理内存写出到socket中,这是一个完整的数据传输过程,而零拷贝是指由于使用了直接内存,并不需要从物理内存拷贝到jvm内存,jvm堆内使用是地址指向直接内存,少了一次交互,所以称之为零拷贝。
netty源码分析及优点相关推荐
- Netty源码分析第6章(解码器)----第4节: 分隔符解码器
Netty源码分析第6章(解码器)---->第4节: 分隔符解码器 Netty源码分析第六章: 解码器 第四节: 分隔符解码器 基于分隔符解码器DelimiterBasedFrameDecode ...
- Netty源码分析第1章(Netty启动流程)----第4节: 注册多路复用
Netty源码分析第1章(Netty启动流程)---->第4节: 注册多路复用 Netty源码分析第一章:Netty启动流程 第四节:注册多路复用 回顾下以上的小节, 我们知道了channe ...
- Netty源码分析第7章(编码器和写数据)----第2节: MessageToByteEncoder
Netty源码分析第7章(编码器和写数据)---->第2节: MessageToByteEncoder Netty源码分析第七章: Netty源码分析 第二节: MessageToByteEnc ...
- Netty源码分析第5章(ByteBuf)----第5节: directArena分配缓冲区概述
Netty源码分析第5章(ByteBuf)---->第5节: directArena分配缓冲区概述 Netty源码分析第五章: ByteBuf 第五节: directArena分配缓冲区概述 上 ...
- Netty源码分析系列之常用解码器(下)——LengthFieldBasedFrameDecoder
扫描下方二维码或者微信搜索公众号菜鸟飞呀飞,即可关注微信公众号,Spring源码分析和Java并发编程文章. 前言 在上一篇文章中分析了三个比较简单的解码器,今天接着分析最后一个常用的解码器:Leng ...
- Netty源码分析(六)—Future和Promis分析
Netty源码分析(六)-Future和Promis分析 Future用来在异步执行中获取提前执行的结果 个人主页:tuzhenyu's page 原文地址:Netty源码分析(六)-Future和P ...
- 【Netty源码分析摘录】(八)新连接的接入
文章目录 1.问题 2.检测新连接接入 3.创建客户端 channel 4. 绑定 NioEventLoop 4.1 register0 4.1.1 doRegister() 4.1.2 pipeli ...
- Netty源码分析系列之服务端Channel的端口绑定
扫描下方二维码或者微信搜索公众号菜鸟飞呀飞,即可关注微信公众号,Spring源码分析和Java并发编程文章. 微信公众号 问题 本文内容是接着前两篇文章写的,有兴趣的朋友可以先去阅读下两篇文章: Ne ...
- netty源码分析系列——EventLoop
2019独角兽企业重金招聘Python工程师标准>>> 前言 EventLoop也是netty作为一个事件驱动架构的网络框架的重要组成部分,netty主要通过它来实现异步编程,从前面 ...
最新文章
- pip在windows下安装配件/宏包
- MATALO OPENCART 自适应主题模板 ABC-0679-02
- lazada店铺成长案例分享!把握小众类目商机,店铺月销过万单!
- 配置token_Nginx常用的配置
- bind merge r 和join_R语言并行读取csv:地表最快csv合并方法
- 我的react组件化开发道路(二) 分页 组件开发
- openstack 在线repo
- linux查看允许创建多少个进程,Linux下查看某个进程创建了多少线程
- 索尼发布工业设备用SWIR图像传感器 采用5微米像素尺寸
- RAN adjusts schedule for 2nd wave of 5G specifications
- python爬取地图地址_python爬取了高德地图一些地点的数据,爬出来数据大致情况如下:...
- 12月10日站立会议
- 深度学习涉及到的线性代数知识点总结(一)
- c语言:数组插入处理
- 1. Pycharm新建项目
- less中的变量 单位问题
- Ubuntu16.04 安装字体教程
- AIX 网卡绑定聚合具体操作步骤
- 从IP协议看计算机网络通信
- 程序员拒绝PM小姐姐需求的 4 大理由!
热门文章
- C++ 虚函数表 vfptr详解
- icns文件怎么打开_Mac快速生成icns图标文件 | kTWO-个人博客
- 浅谈统一权限管理平台
- iOS app 打包发布
- HTTP 405 错误 – 方法不被允许 (Method not allowed)【转载】
- 神级:程序员面试、算法研究、编程艺术、红黑树、机器学习5大经典原创系列集锦与总结
- 谷歌借Google Play重返中国,这次能成功吗?
- 沙特国王科技大学计算机专业,沙特国王科技大学好不好?在世界的排名怎么样啊?哪个专业最强?...
- 【微信小程序】上传Word、txt、Excel、PPT等文件
- ceph分布式存储-常见 PG 故障处理