想了解Netty原理?先来看看Netty的四个核心内容

本文详细介绍了Netty的四大核心内容:ByteBuf作为高效缓冲区替代了JDK的ByteBuffer,提供动态扩容和零拷贝机制;Channel作为数据通信的通道,Netty对其进行了优化,增强了网络编程性能;ChannelPipeline实现了责任链设计模式,允许灵活添加自定义处理器;最后,Reactor线程模型通过多线程提高IO性能,Netty采用多Reactor多线程模型,降低了耦合度。
摘要由CSDN通过智能技术生成

Netty

Netty is an asynchronous event-driven network application framework 
for rapid development of maintainable high performance protocol servers & clients.

意思是Netty是一个高性能,高扩展性的异步事件驱动的网络应用程序框架,它极大地简化了客户端和服务器开发等网络编程。

Netty是一个比较成熟的开源框架,它的网络编程的高性能、高拓展性得到大众的认可。那么它存在的目的是什么?无疑,相比传统JDK中的网络编程技术,它更显得高性能和高拓展能力。那么问题来了,它比传统的JDK还厉害?它不是Java框架吗?它不是用Java写的?答案是对,它是Java写的,它是针对JDK网络编程的基础上进行了“重构”,让网络编程变得更加高性能和高拓展,更易于服务于大众。

那么Netty的增强点在哪里呢?下面介绍Netty的四个核心东西

 

Netty中的四个核心内容点:

一、ByteBuf

在Netty中引入一个叫ByteBuf的东西。它是啥?有什么用?

原来在JDK中也有那么一个东西叫ByteBuffer。嗯?名字差不多?这两个东西有什么区别?Netty引入ByteBuf的是为了取代ByteBuffer?答案是对的,就是要取代!取代的目的就很明显了,不好用,性能差。

那么说说二者的区别及作用

JDK的ByteBuffer的缺点:

  • 无法动态扩容。长度是固定的,不能动态扩展和收缩,当数据大于bytebuffer容量时,会发生索引越界异常。
  • api使用复杂。

Netty的ByteBuf:

  • api操作便捷性
  • 动态扩容(默认值256字节,最大Integer.MAX_VALUES=2GB)
  • 多种bytebuf实现
  • 高效的零拷贝机制

结果:对比一下,不难发现,Netty的ByteBuf不仅优化了JDK中ByteBuffer的缺点还进行了一些增强。

作用:Netty 在底层字节数据读写是以 ByteBuf 为缓冲单位进行交互的,而JDK是用ByteBuffer。

接下来重点说一下Netty中ByteBuf的一些特点

首先是ByteBuf的结构

图片来源:https://blog.csdn.net/ZBylant/article/details/83037421

由图可知,在 ByteBuf 结构存在两个指针,分别是读指针 readerIndex 和写指针 writeIndex ,始终 writeIndex > readIndex。当 writeIndex = capacity 时,ByteBuf 会一些算法来进行动态扩容,所以它的灵活性很好,然后反观JDK中的ByteBuffer如下图

è¿éåå¾çæè¿°

图片来源https://www.cnblogs.com/stoneFang/p/6715291.html

JDK中的ByteBuffer的大小是固定的,无法扩容。position指针是当前读写的位置,即当进入写模式的时候,每写入数据position就会往下移动一格,直到 limit / capacity 的位置;当进入读模式的时候,position指针就移到第一格,然后开始读,直到 limit 。

通过对比二者的结构,可以看出Netty中ByteBuf比JDK的ByteBuffer更加灵活,性能更好。

除此之外,ByteBuf 还有一个高效的机制——高效的零拷贝机制。这是JDK中的ByteBuffer没有的。

什么是零拷贝机制?

上面讲到了 ByteBuf 是字节数据读写交互的一种单位或容器,那么如果要把这些数据组装起来呢?要怎么办?

按照一般的情况,创建一个大容器,然后把每个小容器的内容复制进去到大容器中,最后大容器的数据就组装起来了。

但是 Byte

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值