总是想不明白的零拷贝

linux 分用户态和内核态,两者权限不一样,逻辑地址空间不一样

以 write 为例,用户程序可能是把数据写入了自己的缓冲区,然后把用户进程缓冲区的数据拷入内核缓冲区,再刷到磁盘

read 则是,把内核缓冲区的数据拷入用户进程缓冲区,再从用户进程缓冲区取出数据

而对于零拷贝:

mmap 针对文件 IO,我理解用户进程不再使用自己的缓冲区了,通过 mmap 的映射,它可以直接操作内核态的 page cache

sendFile 针对网络 IO,用户进程也是不再使用自己的缓冲区了,直接把数据写入内核态的 socket 缓冲区中

所以,总结就是不再使用用户进程的缓冲区

原文地址:https://www.cnblogs.com/allenwas3/p/12218522.html