- 首先,调用read时,数据文件A拷贝到了kernel模式;
- 之后,CPU控制将kernel模式数据复制到user模式下;
- 调用write时,先将user模式下的内容复制到到kernel模式下的socket的buffer中;
- 最后将kernel模式下的socket buffer的数据复制到网卡设备中传送;
Linux中的sendfile()以及Java NIO中的FileChannel.transferTo()方法都实现了零拷贝的功能,而在Netty中也通过在FileRegion中包装了NIO的FileChannel.transferTo()方法实现了零拷贝。
网友评论