我有一个大约10 GB的巨大文件。我必须对Java中的文件执行排序,过滤等操作。每个操作都可以并行完成。
启动10个线程并且并行读取文件是否合适?每个线程读取1 GB的文件。 有没有其他选项来解决超大文件的问题并尽快处理它们? NIO是否适合这种情况?
目前,我正在连续执行操作,处理此类文件大约需要20分钟。
谢谢,
答案 0 :(得分:11)
启动10个线程并同时读取文件是否合适?
几乎肯定不是 - 虽然这取决于。如果它来自SSD(实际上没有寻道时间)那么可能是。如果它是传统的磁盘,绝对不是。
这并不意味着您不能使用多个线程 - 您可能会创建一个线程来读取文件,只执行最基本的任务以将数据转换为可处理的块。然后使用生产者/消费者队列让多个线程处理数据。
如果不知道“排序,过滤等”(这是非常模糊的)我们无法真正说明该过程的可并行化程度 - 但尝试在单个文件上并行执行IO将< em>可能没有帮助。
答案 1 :(得分:1)
尝试分析代码以查看瓶颈所在。您是否尝试过让一个线程读取整个文件(或尽可能多),并将其交给10个线程进行处理?如果文件I / O是你的瓶颈(这似乎是合理的),这将改善你的整体运行时间。