NIO零拷贝

在Java体系的NIO和Netty中都存在着零拷贝这么一个东西,这项技术可以提升数据的读写速度,那到底什么是零拷贝呢,下面这张图可以很详细的说明。

NIO零拷贝_第1张图片

在发送系统调用sendfile之前,处于用于上下文,之后切换到内核上下文进行系统调用 syscall sendfile,调用完成文件发送完成之后切换回用户上下文。其中在内核空间发生的事情主要过程是通过系统驱动的DMA(直接存储器存取,是一种快速传送数据的机制,外部设备不通过CPU而直接与系统内存交换数据的接口技术) copy将数据拷贝到内核缓冲区(kernel buffer),然后将内核缓冲区中的数据的位置(offer)和大小(size)等元信息追加(append)到socket buffer中,最后协议引擎从socket buffer中获取数据的位置和大小将数据直接从内核缓冲区拷贝到网卡缓冲区。

你可能感兴趣的:(netty,NIO)