Java 核心技术面试精讲
杨晓峰
前 Oracle 首席工程师
125942 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
Java 核心技术面试精讲
15
15
1.0x
00:00/00:00
登录|注册

第38讲 | 对比Java标准NIO类库,你知道Netty是如何实现更高性能的吗?

Netty的线程模型是什么样的?
从一个简单的例子开始,对比在中基于IO、NIO等标准API的实例
Netty的整体介绍
深入探讨性能优化手段
在通信协议、序列化等其他角度的优化
使用更多本地代码
充分利用了Java的Zero-Copy机制
利用EventLoop等创新性的机制
灵活的线程模型
更加优雅的Reactor模式实现
一课一练
知识扩展
考点分析
典型回答
对比Java标准NIO类库,你知道Netty是如何实现更高性能的吗?

该思维导图由 AI 生成,仅供参考

今天我会对 NIO 进行一些补充,在专栏第 11 讲中,我们初步接触了 Java 提供的几种 IO 机制,作为语言基础类库,Java 自身的 NIO 设计更偏底层,这本无可厚非,但是对于一线的应用开发者,其复杂性、扩展性等方面,就存在一定的局限了。在基础 NIO 之上,Netty 构建了更加易用、高性能的网络框架,广泛应用于互联网、游戏、电信等各种领域。
今天我要问你的问题是,对比 Java 标准 NIO 类库,你知道 Netty 是如何实现更高性能的吗?

典型回答

单独从性能角度,Netty 在基础的 NIO 等类库之上进行了很多改进,例如:
更加优雅的 Reactor 模式实现、灵活的线程模型、利用 EventLoop 等创新性的机制,可以非常高效地管理成百上千的 Channel。
充分利用了 Java 的 Zero-Copy 机制,并且从多种角度,“斤斤计较”般的降低内存分配和回收的开销。例如,使用池化的 Direct Buffer 等技术,在提高 IO 性能的同时,减少了对象的创建和销毁;利用反射等技术直接操纵 SelectionKey,使用数组而不是 Java 容器等。
使用更多本地代码。例如,直接利用 JNI 调用 Open SSL 等方式,获得比 Java 内建 SSL 引擎更好的性能。
在通信协议、序列化等其他角度的优化。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Netty是如何实现更高性能的?本文介绍了Netty相对于Java标准NIO类库的性能优势。Netty在基础的NIO类库上进行了多方面的改进,包括更优雅的Reactor模式实现、灵活的线程模型、利用EventLoop等创新性机制,以及充分利用Java的Zero-Copy机制、池化的Direct Buffer等技术,以降低内存分配和回收的开销。此外,Netty还使用更多本地代码,如直接利用JNI调用Open SSL等方式,以获得比Java内建SSL引擎更好的性能。Netty还在通信协议、序列化等其他方面进行了优化。文章还介绍了Netty的设计思路和目的,强调了其与Java自身NIO框架的不同之处,以及Netty相对于Java NIO的功能扩展。最后,文章通过一个简单的代码实例展示了Netty的核心概念,强调了Netty相对于Java标准NIO的高层次封装,简化了编程模型,提高了可靠性和可扩展性。文章还提到了一些可能成为面试考点的知识点,如Reactor模式和Netty线程模型、Pipelining、EventLoop等部分的设计实现细节等。文章总结了Netty的性能优势,并鼓励读者深入学习相关知识。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Java 核心技术面试精讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • 忆水寒
    Netty采用Reactor线程模型。这里面主要有三种Reactor线程模型。分别是单线程模式、主从Reactor模式、多Reactor线程模式。其都可以通过初试和EventLoopGroup进行设置。其主要区别在于,单Reactor模式就是一个线程,既进程处理连接,也处理IO。类似于我们传统的OIO编程。主从Reactor模式,其实就是将监听连接和处理IO的分开在不同的线程完成。最后,主从Reactor线程模型,为了解决多Reactor模型下单一线程性能不足的问题。改为了一组线程池进行处理。官方默认的是采用这种主从Reactor模型。其线程数默认为CPU内核的2倍。杨老师,不知道我说的对不对?

    作者回复: 对的

    2018-08-06
    2
    59
  • Levy
    netty线程模型一般分为监听线程和I/O处理线程,也即bossGroup和workerGroup,属于多Reactor模型

    作者回复: 是的,不同版本模型有点区别,但逻辑上都还是区分

    2018-08-04
    13
  • bills
    老师,能给说下mina和netty的相同和不同吗?

    作者回复: mina没仔细研究过...

    2018-08-06
    3
    1
  • 青鸟飞鱼
    个人觉得关于Netty这块知识讲的还是太表面化了,如果能深入点,肯定更好
    2019-02-21
    2
    31
  • 小恩
    杨老师您好,我有5年左右的Java开发经验,也不断的尝试学习netty,但还是找不到真正能够使用到的地方,最多看一些源码,学习一下简单的线程模型,netty离我最近的应该是spring boot 2.0里面的了,想请教一下在我们实际业务开发中,什么样的业务场景会用到netty,谢谢!
    2018-12-05
    9
    6
  • Allen
    有三种模型。1-1。1-n n-n. 并且可以根据实际情况自动进行调整,可谓是线程模型的终极版本,简直是太酷了
    2018-08-05
    6
  • ttxser
    服务器的多reactor貌似不支持吧,boss虽然能设置多线程,但最后只能绑定一个线程到serversocket来accept?
    2018-08-17
    3
  • WolvesLeader
    一直不明白,n_n的使用场景
    2018-08-08
    2
  • 慎独
    Reactor 模式和 Netty 线程模型这块,老师能详细讲解下吗?
    2019-12-04
    1
    1
  • 随心而至
    想深入还得自己结合实例,针对性地读读源码,之前囫囵吞枣似的读完了netty实战,并没有太理解本质。RTFSC,追根溯源,适可而止,确实太需要了
    2019-09-20
    1
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部