今天梳理了一下netty源码调用流程,整理了一下详细流程图,如下

netty流程图

netty的优点

  1. Reactor主从设计模型
  2. Nio非阻塞
  3. 无锁化串行
  4. 零拷贝(使用直接内存)
  5. ByteBuf内存池
  6. 灵活的TCP参数配置能力
  7. 并发优化

然后找几个解释一下,如下

Reactor主从设计模型

Netty 抽象出两组线程池BossGroup和WorkerGroup,BossGroup和WorkerGroup类型都NioEventLoopGroup,BossGroup专门负责接收客户端的连接, WorkerGroup专门负责网络的读写,bossGroup每次和客户端执创建完连接,都会(轮询)选择一个workGroup,把selectorKey注册到workGroup上NIOEventLoop的selector,所以客户端下一次进行数据交互的时候就会在workGroup上。

无锁化串行

在Netty中的无锁化串行是指数据在ChannelPipeline中执行Handler是串行执行的,不存在多线程,这样就减少了为了竞争锁带来的性能下降,我们可以通过配置NIO线程池参数来指定多个串行线程并行运行,这样的效率会更高。而且Redis也是利用这种思想来设计的。

直接内存

直接内存指的是元空间或者物理机的内存,是堆外内存。

使用直接内存的优点如下

  1. 不占用堆内存空间,减少了发生GC的可能
  2. 不需要从物理内存拷贝到堆内存(零拷贝原理)。

缺点:

  1. 初始分配慢
  2. 没有jvm管理,容易出现fullGC

零拷贝

数据在交互过程中一般需要先从socket中拷贝到物理内存,然后从物理内存在拷贝到jvm内存,处理完之后再从jvm内存拷贝到物理内存,物理内存写出到socket中,这是一个完整的数据传输过程,而零拷贝是指由于使用了直接内存,并不需要从物理内存拷贝到jvm内存,jvm堆内使用是地址指向直接内存,少了一次交互,所以称之为零拷贝。

netty源码分析及优点相关推荐

  1. Netty源码分析第6章(解码器)----第4节: 分隔符解码器

    Netty源码分析第6章(解码器)---->第4节: 分隔符解码器 Netty源码分析第六章: 解码器 第四节: 分隔符解码器 基于分隔符解码器DelimiterBasedFrameDecode ...

  2. Netty源码分析第1章(Netty启动流程)----第4节: 注册多路复用

    Netty源码分析第1章(Netty启动流程)---->第4节: 注册多路复用 Netty源码分析第一章:Netty启动流程   第四节:注册多路复用 回顾下以上的小节, 我们知道了channe ...

  3. Netty源码分析第7章(编码器和写数据)----第2节: MessageToByteEncoder

    Netty源码分析第7章(编码器和写数据)---->第2节: MessageToByteEncoder Netty源码分析第七章: Netty源码分析 第二节: MessageToByteEnc ...

  4. Netty源码分析第5章(ByteBuf)----第5节: directArena分配缓冲区概述

    Netty源码分析第5章(ByteBuf)---->第5节: directArena分配缓冲区概述 Netty源码分析第五章: ByteBuf 第五节: directArena分配缓冲区概述 上 ...

  5. Netty源码分析系列之常用解码器(下)——LengthFieldBasedFrameDecoder

    扫描下方二维码或者微信搜索公众号菜鸟飞呀飞,即可关注微信公众号,Spring源码分析和Java并发编程文章. 前言 在上一篇文章中分析了三个比较简单的解码器,今天接着分析最后一个常用的解码器:Leng ...

  6. Netty源码分析(六)—Future和Promis分析

    Netty源码分析(六)-Future和Promis分析 Future用来在异步执行中获取提前执行的结果 个人主页:tuzhenyu's page 原文地址:Netty源码分析(六)-Future和P ...

  7. 【Netty源码分析摘录】(八)新连接的接入

    文章目录 1.问题 2.检测新连接接入 3.创建客户端 channel 4. 绑定 NioEventLoop 4.1 register0 4.1.1 doRegister() 4.1.2 pipeli ...

  8. Netty源码分析系列之服务端Channel的端口绑定

    扫描下方二维码或者微信搜索公众号菜鸟飞呀飞,即可关注微信公众号,Spring源码分析和Java并发编程文章. 微信公众号 问题 本文内容是接着前两篇文章写的,有兴趣的朋友可以先去阅读下两篇文章: Ne ...

  9. netty源码分析系列——EventLoop

    2019独角兽企业重金招聘Python工程师标准>>> 前言 EventLoop也是netty作为一个事件驱动架构的网络框架的重要组成部分,netty主要通过它来实现异步编程,从前面 ...

最新文章

  1. pip在windows下安装配件/宏包
  2. MATALO OPENCART 自适应主题模板 ABC-0679-02
  3. lazada店铺成长案例分享!把握小众类目商机,店铺月销过万单!
  4. 配置token_Nginx常用的配置
  5. bind merge r 和join_R语言并行读取csv:地表最快csv合并方法
  6. 我的react组件化开发道路(二) 分页 组件开发
  7. openstack 在线repo
  8. linux查看允许创建多少个进程,Linux下查看某个进程创建了多少线程
  9. 索尼发布工业设备用SWIR图像传感器 采用5微米像素尺寸
  10. RAN adjusts schedule for 2nd wave of 5G specifications
  11. python爬取地图地址_python爬取了高德地图一些地点的数据,爬出来数据大致情况如下:...
  12. 12月10日站立会议
  13. 深度学习涉及到的线性代数知识点总结(一)
  14. c语言:数组插入处理
  15. 1. Pycharm新建项目
  16. less中的变量 单位问题
  17. Ubuntu16.04 安装字体教程
  18. AIX 网卡绑定聚合具体操作步骤
  19. 从IP协议看计算机网络通信
  20. 程序员拒绝PM小姐姐需求的 4 大理由!

热门文章

  1. C++ 虚函数表 vfptr详解
  2. icns文件怎么打开_Mac快速生成icns图标文件 | kTWO-个人博客
  3. 浅谈统一权限管理平台
  4. iOS app 打包发布
  5. HTTP 405 错误 – 方法不被允许 (Method not allowed)【转载】
  6. 神级:程序员面试、算法研究、编程艺术、红黑树、机器学习5大经典原创系列集锦与总结
  7. 谷歌借Google Play重返中国,这次能成功吗?
  8. 沙特国王科技大学计算机专业,沙特国王科技大学好不好?在世界的排名怎么样啊?哪个专业最强?...
  9. 【微信小程序】上传Word、txt、Excel、PPT等文件
  10. ceph分布式存储-常见 PG 故障处理