传统上,数据从一个地方传输到另一个地方,通常会涉及到多次内存拷贝操作。像传统 Java 读取文件通过网卡发送过程中涉及到数据的拷贝有 4 次。

为了避免占用太多 cpu 时间,使用了 DMA 代替 cpu 做 I/O 设备和内存之间的数据传输,使用 CPU 中断进一步压缩 cpu 的使用时间。

但以上的操作无法减少「拷贝次数」,零拷贝则减少了文件拷贝次数。

零拷贝的几种实现

参考

零拷贝wiki