零拷贝传输
传统的IO传输
工作方式:数据的读取和写入是从用户空间到内核空间之间来回复制,而内核空间的数据是通过操作系统层面的IO接入从磁盘读取和写入
- 期间发送了四次的用户态和内核态之间的上下文切换,因为发生了两次的系统调用,还发生了四次的拷贝
如何提高文件传输的性能
- 减少用户态和内核态的上下文切换的次数:因为传统的文件传输是需要两次系统调用,发生四次上下文切换,如果要减少上下文切换的次数,就必须减少系统调用
- 减少拷贝的次数:传统的文件是需要经过四次拷贝的,所以要减少拷贝的次数来提高速率,用户缓冲区的拷贝完全可以避免
零拷贝的方式
mmap+writer
- mmap系统调用就是会直接把内核缓冲区的数据映射到用户空间,这样,操作系统内核和用户空间就不需要再进行任何的数据拷贝(映射的方法:通过建立页表,将用户的一段虚拟内存映射到内核区)
- 三次拷贝,两次的系统调用,四次用户态和内核态的上下文切换