【问题标题】:Read a single file with multithreading使用多线程读取单个文件
【发布时间】:2017-02-01 20:30:11
【问题描述】:

我正在尝试读取每行包含一个单词(不同长度)的巨大文件。 我想用多线程读取它取决于字符串长度。

例如,线程一读取具有一个长度单词的行,线程二读取两个长度并且......

有什么方法可以实现吗?如果是,对性能有何影响?

我找到了这个例子,但我不能放在一起。

参考 1:Multithread file reading

参考2:How to read files in multithreaded mode?

【问题讨论】:

  • 不,就像您的参考文献 #2 中一样。一个线程将读取文件,如果处理复杂,您可以将这些行传递给不同的线程进行处理。性能可能会也可能不会提高。

标签: java multithreading file


【解决方案1】:

您可以使用多个线程,但不会更快。要找到给定长度的所有行,您必须阅读所有其他行。

有什么办法可以做到吗?

阅读所有行并忽略您过滤掉的行。

您可以做的是在不同的线程中处理不同的行,但这取决于 CPU 密集程度是有帮助还是较慢。

【讨论】:

  • 我正在尝试比较单词,它们是否是彼此的字谜,我认为在阅读时对单词进行分类将有助于更快。但是,正如您所提到的,阅读所有行以找到长度是一个障碍。
  • 我想,我必须像参考#2 那样集中阅读文件碎片。您有什么加快速度的建议吗?
  • @user1060251 如果您想检查许多单词是否是一个字谜,请对字母进行排序,并在排序后的字母映射中将它们索引到所有字词的单词。这会给你 O(n) 的时间复杂度。
  • 我的程序使用单线程 O(n) for loop 和 nlog(n) for sort 做完全相同的事情。但是,假设 100 亿行我将如何扩展它?
  • @user1060251 但是,假设有 100 亿行,我将如何扩展? 购买更快的存储系统。
【解决方案2】:

在多线程模式下读取文件只会让事情变慢,因为磁盘驱动器必须在多个读取点之间移动磁头。相反,将计算工作从读取线程转移到工作线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    相关资源
    最近更新 更多