Zero Copy零拷贝技术研究
网络文件传输---传统非零拷贝技术
网络文件传输---零拷贝技术
传统方式: read(file, tmp_buf, len); write(socket, tmp_buf, len); 1、调用read函数,文件数据被copy到内核缓冲区 2、read函数返回,文件数据从内核缓冲区copy到用户缓冲区 3、write函数调用,将文件数据从用户缓冲区copy到内核与socket相关的缓冲区。 4、数据从socket缓冲区copy到相关协议引擎。
零拷贝方式: sendfile(socket, file, len); 1、sendfile系统调用,文件数据被copy至内核缓冲区 2、再从内核缓冲区copy至内核中socket相关的缓冲区 3、最后再socket相关的缓冲区copy到协议引擎
应用场景: Nginx: 设置 sendfile on
Kafka中的零拷贝
RocketMq中的零拷贝