0

嗨,我需要通过 java 中的多线程处理大量文件。这些文件将是随机大小(最小:100 MB,最大:1.5GB)。配置是我最多只能创建 8 个线程,每个线程将从源目录分配 8 个文件进行处理。问题有时是巨大的文件被分配给单个线程本身,从而降低了性能。我想知道是否无论如何都可以将文件分配给线程,以便所有线程都将处理相同数量的大小。我的意思是我想根据文件大小平衡线程之间的负载。

提前致谢 :)

4

1 回答 1

0

您甚至不应该从单个机械磁盘执行并行 I/O,因为它实际上比单线程 I/O 慢。这里有很多答案可以解释这一点。基本上磁盘的机械头每次都需要旋转以寻找下一个读取位置。这是一项昂贵的操作。如果您并行执行此操作,那么您只是在每个线程轮到运行时弹跳头部。

最好的方法是使用单个生产者线程逐个顺序读取文件,并使用工作线程池并行处理它们。

于 2012-06-21T08:28:42.713 回答