gpt4 book ai didi

netty - Unpooled 和 UnpooledByteBufAllocator 有什么区别?

转载 作者:行者123 更新时间:2023-12-01 11:25:18 37 4
gpt4 key购买 nike

似乎 netty 4.0.24.final 两者都有 UnpooledUnpooledByteBufAllocator可用于分配未池化的缓冲区。那为什么是2?什么时候用哪个?

加 1

我深入研究了 Netty 4.0.24.Final 的源代码。这是我到目前为止的发现。

Netty 的理念是通过少量的接口(interface)/抽象类来公开广泛的功能。所以我从抽象类 ByteBuf 开始.

类型层次结构如下所示:

enter image description here

所以ByteBuf可归类为 Pooled || UnpooledDirect || Heap .
Unpooled类是这样实现的:

enter image description here
ALLOC用于Unpooled分配缓冲区。

所以我认为UnpooledUnpooledByteBufferAllocator密切相关。

一些问题仍然悬而未决:

  • 为什么netty的设计师不介绍UnpooledByteBuf<T>在层次结构中就像 PooledByteBuf<T> ?这将使类型层次结构更加对称。
  • 看来Unpooled那种包裹UnpooledByteBufAllocator ,那么为什么两者都需要呢?
  • 最佳答案

    PooledByteBuf<T>是一个抽象的父级,它包含 Direct、UnsafeDirect 和 Heap 实现常见的大部分池化逻辑。未合并的版本没有要共享的通用逻辑。这可能就是不对称的来源。

    一般来说,缓冲区分配器不应该直接实例化。它们可以设置为 ChannelOption在您 channel 的整个生命周期中,无论何时调用 channel.alloc() ,将返回 channel 构建时设置的实例。你应该主要使用那个。它是池化/非池化、直接安全/不安全还是基于堆取决于 Netty 的默认设置、您的配置和您运行的平台。
    Unpooled是首选方式,如果您不能或不想调用 channel.alloc() , 因为它会让你从检查平台相关的事情的负担中解脱出来,比如 Unsafe 的存在。使用 wrappedBuffer() 时.话虽如此,归根结底,它确实是一个实用程序类,您可能可以手动完成所有这些操作,但是您为什么要这样做呢?

    关于netty - Unpooled 和 UnpooledByteBufAllocator 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28646649/

    37 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com