首先先说一下传统的文件传输形式,就是得先将磁盘文件通过DMA技术拷贝到内核缓存区中,在通过CPU拷贝到用户缓冲区中,再传到socket缓冲区,最好再传到网卡。这整个过程需要4次拷贝,并且需要4次用户态与内核态的切换。然后零拷贝的话,通过一个sendfile命令为起始命令,将磁盘文件传到内核缓存区,再直接传到网卡,这种做法只需要2次上下文切换和2次数据拷贝,且在传输期间没有CPU的参与,所有的数据都是通过DMA来进行传输的,不需要CPU参与其中,大大提高了文件传输的性能。

    没有零拷贝时
    image.png
    有零拷贝时
    image.png