【问题标题】:Why is data transfer speed slower for multiple smaller files than a huge file?为什么多个小文件的数据传输速度比大文件慢?
【发布时间】:2017-11-17 07:45:19
【问题描述】:

我一直注意到,例如,当一个 React 项目或整个网站的大小总计为 350-450 MB 的实例需要 更长的时间传输比 2-3 GB 视频文件或事实上捆绑到一个文件(如 .zip/.rar/.iso)中的任意数量的文件。

一些 SC :-

转移一些反应项目:-

传输电影:-

我搜索了网络,但不幸的是没有找到相关的帖子/答案。
也许我没有使用必要的关键字...idk

如果可能的话,详细的解释会很有帮助:)
即使解释深入到操作系统概念,它也很酷。 我只想知道为什么

【问题讨论】:

  • 那是因为磁盘碎片。大文件存储在内存中的连续块中。小的存储在 HDD/SSD 的不同位置,因此 CPU 需要先获取它们的地址,然后才能开始传输它们。

标签: file file-transfer transfer


【解决方案1】:

当您传输文件时,“幕后”实际上发生了很多事情:

  • 打开原始文件
    • 将路径字符串映射到操作系统实际理解的内容
    • 已检查安全性 (FILE_ACCESS):是否允许您读取和删除文件?
    • 检查了更多安全性 (FILE_SHARE):您是否被允许,是否有其他人在处理该文件?
  • 创建新文件
    • 将路径字符串映射到操作系统实际理解的内容
    • 再次安全 (FILE_ACCESS):您可以在此处创建文件吗?和目录 在它之上,在它之上……
    • 创建实际的新文件,并将其放入文件系统查找表中
    • 设置默认文件属性
    • 禁止其他人读取/写入/删除新文件 (FILE_SHARE)
  • 实际转移
    • 读取 4k 字节
    • 写入 4k 字节,然后重复
  • 原始文件被删除
  • 设置新文件的最后修改日期
  • 新文件已关闭

我确定我在这里已经遗漏了很多步骤,但我在这里是为了说明在实际转移之前和之后发生的很多事情。即使文件是空的(0 字节),我们仍然需要做这一切。除了已经给出的答案(例如碎片化)之外。

【讨论】:

  • 我把它做成了一个wiki,也许我们可以完成实际发生的事情的列表。
【解决方案2】:

根据https://serverfault.com/a/9743 的建议,加上写入多个文件也需要在索引表中进行索引。它还将检查是否存在相同的文件名。这需要时间!

【讨论】:

  • 但是压缩本身需要的时间与传输一样多,尽管我不否认这是一次性的工作,除非你不断地对那些小文件进行更改,这在代码的情况下是正确的。
猜你喜欢
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 2020-08-19
相关资源
最近更新 更多