【问题标题】:C++ how to divide large text file for multithreading readC ++如何划分大文本文件以进行多线程读取
【发布时间】:2018-01-07 12:21:18
【问题描述】:

我有以下问题: 我有一个很大的 txt 文件,我必须在其中找到特定的数据。

分割文件以允许不同线程查看文件的最佳方法是什么?

应该通过计算新行标记并设置特定线程应该在哪个新行之后查找值来完成?

任何提示都是无价的。

BR/T

【问题讨论】:

  • 内存映射文件并将单独的地址范围传递给每个线程。担心您要查找的数据跨越地址边界的边缘情况。可能根本不值得做任何线程,因为您将受 IO 限制而不是 CPU 限制;读取文件将是限制步骤,并且多个线程读取同一文件将由于查找而变慢。

标签: c++ multithreading large-files


【解决方案1】:

您可以尝试使用一个线程将文件(或文件的足够大的部分)映射到内存中(它只进行读取 - 就像重复调用 getline() 或其他东西一样),然后使用多个线程从您为文件分配的内存位置。如何分割取决于你——如果你正在寻找一个特定的角色,平等分割应该可以完成这项工作。如果您正在搜索子字符串,那么您仍然会平均拆分,但是然后使用您必须选择的一个线程搜索拆分索引的附近(从索引 - 大小(子字符串)到索引 + 大小(子字符串))。 我绝不是专家,但我认为只进行读取的线程会比磁盘快得多。我正在等待 cmets 证明我对此的正确/错误。 干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-27
    • 2014-11-22
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多