1 背景
1) 服务器上的一个文件,如何通过接口下载到文件,这中间经历多少个客观存在的硬件设备
我以客观存在的组件为支撑,描述非零拷贝和零拷贝的数据流
2) 本篇文章会尽量避免繁琐难懂的话术和词汇,来阐述
2 分层图
3 非零拷贝的数据流图
一条数据从磁盘到通过网络传输出去的数据流图
4 零拷贝的数据流图
5 零拷贝的 "零"在哪里
非零拷贝的数据流,一份数据需要进行如下几次拷贝
1) 磁盘的数据拷贝 ==>Kernel buffer
2) Kurne buffer拷贝 ===> application buffer
3) application buffer ==> socket kernel buffer
4) socket kernel === >网卡
5) 网卡 ===>终端
数据在拷贝时 会占用CPU资源
零拷贝没有额外的数据流
磁盘==> kernel buffer ==>网卡
6 零拷贝的注意事项
零靠贝实现需要借助内核来实现,举个例子
Linux 2.4+ 内核通过 sendfile 系统调用,提供了零拷贝。