MrR*_*ROY 3 linux memory-management nio netty zero-copy
我发现 Netty文档说他们的内置ByteBuffer. 但是读完之后,我注意到它没有提到任何内核空间和用户空间切换,只是关于重用缓冲区。
所以我想知道 Netty 的“零复制”功能是否不同于操作系统级别的“零复制”(这意味着减少从用户空间内存到内核空间内存的复制)?
根据维基百科:
零复制描述了计算机操作,其中 CPU 不执行将数据从一个内存区域复制到另一个内存区域的任务。
操作系统级零复制涉及避免在将数据发送到硬件驱动程序(网卡或磁盘驱动器)之前将内存块从一个位置复制到另一个位置(通常从用户空间到内核空间),反之亦然。
Netty 零副本正在谈论在 Java 级别(仅限用户空间)优化数据操作。它们ChannelBuffer允许读取多个字节缓冲区的内容而无需实际复制其内容。
换句话说,虽然 Netty 仅适用于用户空间,但将他们的方法称为“零拷贝”仍然有效。但是,如果操作系统不使用或不支持真正的零拷贝,那么当由 Netty 驱动的程序创建的数据通过网络发送时,数据仍然会从用户空间复制到内核空间,从而实现真正的零拷贝不会实现。