admin管理员组文章数量:1531793
2024年4月5日发(作者:)
如何高效实现文件传输
一般会如何实现文件传输?
服务器提供文件传输功能,需要将磁盘上的文件读取出来,通
过(网络)协议发送到客户端。如果需要你自己编码实现这个文件传
输功能,你会怎么实现呢?
通常,你会选择最直接的方法:从网络请求中找出文件在磁盘
中的路径后,如果这个文件比较大,假设有 320MB,可以在内存中
分配 32KB 的缓冲区,再把文件分成一万份,每份只有 32KB,这样,
从文件的起始位置读入 32KB 到缓冲区,再通过网络 A(PI) 把这
32KB 发送到客户端。接着重复一万次,直到把完整的文件都发送完
毕。如下图所示:
第 1 页 共 11 页
不过这个方案性能并不好,主要有两个原因。
上下文切换:
首先,它至少经历了 4 万次用户态与内核态的上下文切换。因
为每处理 32KB 的消息,就需要一次 re(ad) 调用和一次 wri(te)
调用,每次系统调用都得先从用户态切换到内核态,等内核完成任务
后,再从内核态切换回用户态。可见,每处理 32KB,就有 4 次上下
文切换,重复 1 万次后就有 4 万次切换。
上下文切换的成本并不小,虽然一次切换仅消耗几十纳秒到几
微秒,但高并发服务会放大这类时间的消耗。
内存拷贝:
其次,这个方案做了 4 万次内存拷贝,对 320MB 文件拷贝的
第 2 页 共 11 页
版权声明:本文标题:如何高效实现文件传输 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1712285212a352844.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论