深入简出零拷贝及应用

深入简出零拷贝及应用

1. 传统文件传输过程

传统文件传输过程:需要cpu 全程参与数据搬运,效率低
引入DMA技术:通过DMA控制器完成磁盘到内核缓存区的数据拷贝工作
零拷贝的定义:减少用户态和内核态之前的上下文切换次数& 减少 cpu 拷贝次数

1
2
3
4
read(file, tmp_ buf, len);
//从磁盘读取文件
write(socket, tmp_buf, len)
// 通过网络协议发送给客户端

image-20241119143406826

发生了4次用户态与内核态的上下文切换
发生了 4次数据拷贝

2. 零拷贝的实现方式

mmap
sendfile
splice

3. GO语言中的实现

TCPConn.ReadFrom()

4. 零拷贝的应用

Kafka、 RocketMO

https://zhuanlan.zhihu.com/p/83398714
https://strikefreedom.top/archives/linux-io-and-zero-copy
https://www.linuxjournal.com/article/6345
https://zhuanlan.zhihu.com/p/81499444
https://xie.infog.cn/article/c06fea629926e2b6a8073e2f0
https://heapdump.cn/article/3296288
https://www.51cto.com/article/711960.html


深入简出零拷贝及应用
https://leaf-domain.gitee.io/2025/03/22/go/零拷贝/
作者
叶域
发布于
2025年3月22日
许可协议