零拷贝

38 阅读1分钟

零拷贝

1.什么是零拷贝
零拷贝指计算机执行操作时,CPU不需要先将数据从某处内存复制到另外一个区域
通俗地讲零拷贝就是避免CPU将数据从一个区域拷贝到另一个区域的技术
零拷贝可以有效地提高数据传输效率.

正常的文件从磁盘拷贝到内存中我们需要四次内核态与用户态上下文的切换,同时又4次的文件拷贝

read():指系统调用的过程中把内核缓冲区的数据拷贝到用户的缓冲区
write():操作系统将内核缓冲区的数据拷贝到socket缓冲区中. image.png

共发生了4次用户态与内核态的上下文切换,因为发生了两次系统调用,一次是read(),另一次是write(),每次系统调用都得先从用户态切换到内核态,等内核态完成任务后再从内核态切换回用户态。

改进:使用mmp()把内核缓冲区的数据映射到内存空间这样就减少了一次文件拷贝的过程,只需要三次拷贝

但是仍然需要4次的上下文切换.
最后改进:使用sendfile()切换代替write()和read()调用

image.png 最终实现了2次拷贝2次上下文切换。

image.png