Почему CompositeByteBuf не используется для ByteToMessageDecoder?

В декодере ByteToMessage ( https://github.com/netty/netty/blob/master/codec/src/main/java/io/netty/handler/codec/ByteToMessageDecoder.java), из которого происходит ReplayingDecoder, кумуляция ByteBuf (используется для накопления данных до тех пор, пока из сети не будет считано достаточно данных для начала декодирования), похоже, реализован как динамический массив.

Под этим я подразумеваю, что если текущая совокупность ByteBuf способна сохранять входящие данные, она копируется в совокупность ByteBuf. Если емкости недостаточно, накопление ByteBuf расширяется, и предыдущий накопитель ByteBuf и входящие данные записываются во вновь выделенный экземпляр. Есть ли причина, по которой CompositeByteBuf с ограниченным числом компонентов здесь не используется?

Использование PooledByteBufAllocator должно помочь уменьшить количество выделений памяти, но мне все еще кажется, что использование CompositeByteBuf в сочетании с PooledByteBufAllocator было бы наиболее эффективным решением, поскольку оно будет пытаться оптимизировать как распределение памяти, так и копии.

Однако, прежде чем я зайду в кроличью нору реализации собственной конвейерной стадии для агрегации нулевого копирования, я хотел бы спросить, есть ли конкретная причина для текущей реализации (например, выполняется ли создание CompositeByteBuf под капотом одним из Копия вызывает, или кто-то уже обнаружил, что текущая стратегия эмпирически лучше?)

заранее спасибо

0 ответов

Другие вопросы по тегам