让开发
成为一种享受!

2020 Netty 面试题整理

Netty 是什么?

Netty 是一款基于 NIO(Nonblocking I/O,非阻塞IO)开发的网络通信框架,对比于 BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高。难能可贵的是,在保证快速和易用性的同时,并没有丧失可维护性和性能等优势。

Netty 的特点是什么?

  • 高并发:Netty 是一款基于 NIO(Nonblocking IO,非阻塞IO)开发的网络通信框架,对比于 BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高。
  • 传输快:Netty 的传输依赖于零拷贝特性,尽量减少不必要的内存拷贝,实现了更高效率的传输。
  • 封装好:Netty 封装了 NIO 操作的很多细节,提供了易于使用调用接口。

为什么选择 Netty (Netty 的优势有哪些?)

  • 使用简单:封装了 NIO 的很多细节,使用更简单。
  • 功能强大:预置了多种编解码功能,支持多种主流协议。
  • 定制能力强:可以通过 ChannelHandler 对通信框架进行灵活地扩展。
  • 性能高:通过与其他业界主流的 NIO 框架对比,Netty 的综合性能最优。
  • 成熟稳定:Netty 修复了已经发现的所有 NIO 的 bug,让开发人员可以专注于业务本身。
  • 社区活跃:Netty 是活跃的开源项目,版本迭代周期短,bug 修复速度快。
  • 广泛应用:经历了大规模的商业应用考验,质量已经得到验证。在互联网、大数据、网络游戏、 企业应用、电信软件等众多行业得到成功商用,证明了它可以完全满足不同行业的商业应用。

说说业务中,Netty 的使用场景

  • 构建高性能、低时延的各种Java中间件,例如 MQ、分布式服务框架、ESB 消息总线等, Netty 主要作为基础通信框架提供高性能、低时延的通信服务;
  • 公有或者私有协议栈的基础通信框架,例如可以基于 Netty 构建异步、高性能的 WebSocket 协议栈;
  • 各领域应用,例如大数据、游戏等,Netty 作为高性能的通信框架用于内部各模块的数据分发、传输和汇总等,实现模块之间高性能通信。

原生的 NIO 在 JDK 1.7 版本存在 epoll bug

它会导致 Selector 空轮询,最终导致 CPU 100%。官方声称在 JDK 1.6 版本的 update18 修 复了该问题,但是直到 JDK 1.7 版本该问题仍旧存在,只不过该 BUG 发生概率降低了一些 而已,它并没有得到根本性解决。

Netty 线程模型

首先,Netty 使用 EventLoop 来处理连接上的读写事件,而一个连接上的所有请求都保证 在一个 EventLoop 中被处理,一个 EventLoop 中只有一个 Thread,所以也就实现了一个连 接上的所有事件只会在一个线程中被执行。一个 EventLoopGroup 包含多个 EventLoop,可 以把一个 EventLoop 当做是 Reactor 线程模型中的一个线程,而一个 EventLoopGroup 类似 于一个 ExecutorService

说说 Netty 的零拷贝

扫码关注公众号:Java开发乐园

在聊天窗口回复:vip

输入验证码,即可永久解锁本站全部文章

扫码关注【Java开发乐园】

Java开发乐园

扫码关注【东方】

微信:东方

验证码:
赞(1) 打赏
转载请注明出处:Java开发乐园 » 2020 Netty 面试题整理

来评论一下嘛~ 抢沙发

评论前必须登录!

 

我愿终生等候,换你刹那凝眸

留点🐾印

打赏即是一种肯定,谢谢您的肯定

支付宝扫一扫打赏

微信扫一扫打赏