我有一个大约10 GB的大文件。我必须在Java中对文件进行排序、过滤等操作。每个操作都可以并行完成。
启动10个线程并并行读取文件好吗?每个线程读取1 GB的文件。有没有其他方法可以解决超大文件的问题并尽可能快地处理它们?NIO适用于这样的场景吗?
目前,我正在串行执行操作,大约需要20分钟来处理这样的文件。
谢谢,
发布于 2012-03-15 04:31:02
启动10个线程并并行读取文件好吗?
几乎可以肯定不会--尽管要视情况而定。如果它来自SSD (实际上没有寻道时间),那么可能会。如果它是一个传统的磁盘,肯定不是。
但这并不意味着您不能使用多个线程-您可以创建一个线程来读取文件,只执行最基本的任务来将数据分成可处理的块。然后使用生产者/消费者队列让多个线程处理数据。
如果不知道“排序、过滤等”(这是相当模糊的),我们就不能从一开始就知道进程的并行化程度--但是尝试在单个文件上并行执行IO可能没有什么帮助。
发布于 2012-03-15 04:31:10
尝试分析代码以查看瓶颈所在。您是否尝试过让一个线程读取整个文件(或尽可能多地读取),并将其交给10个线程进行处理?如果文件I/O是您的瓶颈(这似乎是合理的),这应该会改善您的总体运行时间。
https://stackoverflow.com/questions/9709782
复制相似问题