gpt4 book ai didi

performance - 从磁盘流传输数据且空间使用量恒定的最有效的习惯用法是什么?

转载 作者:行者123 更新时间:2023-12-04 07:00:52 26 4
gpt4 key购买 nike

问题描述

我需要从磁盘流式传输大文件。假设文件比内存大。此外,假设我正在对数据进行一些计算并且结果小到足以放入内存。作为一个假设的例子,假设我需要计算一个 200GB 文件的 md5sum 并且我需要保证将使用多少内存。

总之:

  • 需要为常数空间
  • 尽快
  • 假设文件非常大
  • 结果适合内存



  • 使用恒定空间从文件读取/流式传输数据的最快方法是什么?

    我的想法

    如果文件小到可以放入内存,则 mmap在 POSIX 系统上会非常快,不幸的是这里不是这种情况。使用 mmap 是否有任何性能优势?使用较小的缓冲区大小来缓冲文件的连续块?移动 mmap 的系统调用开销是否会增加?缓冲文件占主导地位的任何优势 或者我应该使用我读入的固定缓冲区 fread ?

    最佳答案

    我不太确定 mmap会非常快(非常快被定义为比 fread 快得多)。

    Grep 曾经使用 mmap ,但切换回 fread .原因之一是稳定性(如果文件在映射时缩小或发生 IO 错误,则 mmap 会发生奇怪的事情)。此 page讨论了一些关于它的历史。

    您可以使用选项 --mmap 比较系统上的性能。到grep。在我的系统上,200GB 文件的性能差异可以忽略不计,但您的里程可能会有所不同!

    简而言之,我会使用 fread具有固定大小的缓冲区。编码更简单,更容易处理错误,而且几乎可以肯定足够快。

    关于performance - 从磁盘流传输数据且空间使用量恒定的最有效的习惯用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1863703/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com