第38讲 | 对比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
《Java 核心技术面试精讲》,新⼈⾸单¥59
立即购买
登录 后留言
全部留言(15)
- 最新
- 精选
- 忆水寒Netty采用Reactor线程模型。这里面主要有三种Reactor线程模型。分别是单线程模式、主从Reactor模式、多Reactor线程模式。其都可以通过初试和EventLoopGroup进行设置。其主要区别在于,单Reactor模式就是一个线程,既进程处理连接,也处理IO。类似于我们传统的OIO编程。主从Reactor模式,其实就是将监听连接和处理IO的分开在不同的线程完成。最后,主从Reactor线程模型,为了解决多Reactor模型下单一线程性能不足的问题。改为了一组线程池进行处理。官方默认的是采用这种主从Reactor模型。其线程数默认为CPU内核的2倍。杨老师,不知道我说的对不对?
作者回复: 对的
2018-08-06259 - Levynetty线程模型一般分为监听线程和I/O处理线程,也即bossGroup和workerGroup,属于多Reactor模型
作者回复: 是的,不同版本模型有点区别,但逻辑上都还是区分
2018-08-0413 - bills老师,能给说下mina和netty的相同和不同吗?
作者回复: mina没仔细研究过...
2018-08-0631 - 青鸟飞鱼个人觉得关于Netty这块知识讲的还是太表面化了,如果能深入点,肯定更好2019-02-21231
- 小恩杨老师您好,我有5年左右的Java开发经验,也不断的尝试学习netty,但还是找不到真正能够使用到的地方,最多看一些源码,学习一下简单的线程模型,netty离我最近的应该是spring boot 2.0里面的了,想请教一下在我们实际业务开发中,什么样的业务场景会用到netty,谢谢!2018-12-0596
- Allen有三种模型。1-1。1-n n-n. 并且可以根据实际情况自动进行调整,可谓是线程模型的终极版本,简直是太酷了2018-08-056
- ttxser服务器的多reactor貌似不支持吧,boss虽然能设置多线程,但最后只能绑定一个线程到serversocket来accept?2018-08-173
- WolvesLeader一直不明白,n_n的使用场景2018-08-082
- 慎独Reactor 模式和 Netty 线程模型这块,老师能详细讲解下吗?2019-12-0411
- 随心而至想深入还得自己结合实例,针对性地读读源码,之前囫囵吞枣似的读完了netty实战,并没有太理解本质。RTFSC,追根溯源,适可而止,确实太需要了2019-09-201
收起评论