zero-copy应用场景
应用场景:将本地一个文件通过网络传输给另一个程序
关键字:数据复制过程中,内容不进行修改
zero-copy技术的使用场景有很多,比如Kafka, 又或者是Netty等,可以大大提升程序的性能
下面我们通过对比传统方式和zero-copy的方式传输数据,来理解zero-copy。
传统方式传输数据
代码如下:
// 将文件读取到buf中
File.read(fileDesc, buf, len);
// 将buf中的数据写入到socket中
Socket.send(socket, buf, len);
结合下图理解理解操作如下:
和
详细步骤如下:
1. 调用File.read()方法会发生上下文切换(context switch),从user mode切换到kernel mode。在read()内部会调用sys_read()来从文件中读取数据。第一次copy由DMA (direct memory access)完成,将文件内容从磁盘读出,并存储在kernel空间的buffer中,为方便说明,这个buffer称为reader buffer。
2.