普通IO操作
read(file, tmp_buf, len);
write(socket, tmp_buf, len);
read 和 write 2个系统调用背后发生的事情
image.png
- 发生了 4 次用户态与内核态的上下文切换
- 还发生了 4 次数据拷贝
要想提高文件传输的性能,就需要减少「用户态与内核态的上下文切换」和「内存拷贝」的次数。
零拷贝主要是用来解决操作系统在处理 I/O 操作时,频繁复制数据的问题。关于零拷贝主要技术有 mmap+write、sendfile和splice等几种方式。
网友评论