根据文件大小在java中对线程进行负载均衡

时间:2012-06-21 07:58:00

标签: multithreading load-balancing file-processing

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

提前致谢:)

1 个答案:

答案 0 :(得分:0)

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

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