如何优化文件传输的性能?

先来看看,如何减少「用户态与内核态的上下文切换」的次数呢?

读取磁盘数据的时候,之所以要发生上下文切换,这是因为用户空间没有权限操作磁盘或网卡,内核的权限最高,这些操作设备的过程都需要交由操作系统内核来完成,所以一般要通过内核去完成某些任务的时候,就需要使用操作系统提供的系统调用函数。

而一次系统调用必然会发生 2 次上下文切换:首先从用户态切换到内核态,当内核执行完任务后,再切换回用户态交由进程代码执行。

所以,要想减少上下文切换到次数,就要减少系统调用的次数。

再来看看,如何减少「数据拷贝」的次数?

在前面我们知道了,传统的文件传输方式会历经 4 次数据拷贝,而且这里面,「从内核的读缓冲区拷贝到用户的缓冲区里,再从用户的缓冲区里拷贝到 socket 的缓冲区里」,这个过程是没有必要的。

因为文件传输的应用场景中,在用户空间我们并不会对数据「再加工」,所以数据实际上可以不用搬运到用户空间,因此用户的缓冲区是没有必要存在的

相关推荐
日取其半万世不竭4 小时前
用 Portainer 可视化管理 Docker:容器再多也不用背命令了
运维·docker·容器
kirs_ur5 小时前
ECC & LDPC — SSD 的数据卫士
服务器·数据库·性能优化
动恰客流统计7 小时前
ReID边缘计算视觉统计:餐饮店客流增长的数字化破局路径
java·大数据·运维·人工智能
砍材农夫11 小时前
运维|devops|jenkins构建应用发布
运维·jenkins·devops
△曉風殘月〆12 小时前
如何在Linux中安装Qt开发环境
linux·运维·qt
爱写代码的阿森13 小时前
鸿蒙三方库 | harmony-utils之RegexUtil正则匹配验证详解
服务器·华为·harmonyos·鸿蒙·huawei
雨的旋律209914 小时前
ubuntu2604
linux·运维·服务器
Eloudy14 小时前
ubuntu 22.04安装 cuda 12.8.2
linux·运维·ubuntu
三言老师14 小时前
mkdir创建多级目录,目录创建基础实操
linux·运维·服务器
独孤--蝴蝶15 小时前
Docker容器进阶(一)
运维·docker·容器