对ByteBuf设计的感想


前言

最近以ByteBuf作为入口,开始了Netty的学习,在这里对个人的想法、看法做一个总结。


一、功能与作用

ByteBuf是Netty中中基于byte[]的缓存管理对象。从数据存储位置来说有堆内(Heap)和堆外(Direct)。从对象重用的角度,有池化(Pooled)和非池化(Unpooled)两种。因此具体的实现是存储位置和对象重用方式的组合,每种类型对象的选择在后续文章中进行分析。

二、与ByteBuffer的区别

JDK中提供了类似的ByteBuffer,为何Netty要重定义呢?
首先,ByteBuffer的读写限制较多。作为一个缓存,读取必然依赖写入,这点可以理解。但是ByteBuffer在读的时候需要调用函数完成模式的切换。此外,ByteBuffer一旦创建,容量是固定的,使用者必须小心维护。

其次,由于上述限制,作为一个菜鸟的我很容易搞出事情来,程序这会儿跑的很溜,过一会儿就给整个throw Exception。

因此,在实现上的区别就是非常的精简和迷你,在使用上就是起到督促菜鸟进步的重大作用。

三、设计启示

ByteBuffer是Oracle首席架构师Mark Reinhold实现的。大神一般只做必须的事情,所以实现的ByteBuffer可以说是一个非常精简的内核。从某种程度上说,大神想不出来凡间的RD会这么痛苦(当然也正是普通RD不愿去做更深入的了解造就了本身的平凡)。

而从另外一个角度来说,设计出来就是给大家用的,有人说应该老少皆宜,有人说既然从事开发,那就应该有追求和梦想。听起来两者都没有错,但是具体到公司里面,RD是有层次和级别划分的,不同的层次作用不同,要求不同。一般来说,底层组件高P完成,低P的更多消化业务需求,完成业务向代码的转换。如果低P有恶性竞争,结果就是把本该优雅地有技术改变世界变成了被PM排期无情地改造自己。所以组件难用的时候,我们得从组件和自身两个角度来考量这件事。


总结

本文总结了自己对ByteBuf设计实现上的一些感想,希望对你有所帮助。如果你能给我带来更多输入,欢迎交流。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值