用例: 我有一个带有ID的文件(大约500k) 我的应用程序读取并处理这些文件(每个id的处理量很大)。因此,总体而言,此处理需要大量时间和内存。
我们需要实现的是通过扩展进程数(在单独的盒子/机器上运行Java进程)并将ID的整个列表划分为一些固定的批处理大小,以便5个进程开始处理文件中的项目并选择处理完成后,就补足下一批。 例如。如果文件中的项目总数为100,而我的批量大小为5,总共3个进程,则处理应类似于
如果进程2在其他进程之前完成,则它将开始处理16-20,并通知其他进程,以便下一个可用进程选择项21-25。
请注意,由于内存限制,我们无法在单个进程/主机上使用多线程执行此操作。
有人可以建议解决方案/参考如何实现它。
答案 0 :(得分:1)
听起来您有分布式计算问题。您有一组“要处理的东西”,并且想要在多台计算机上进行该处理。最简单,最典型的方法是将这些“要处理的东西”放入分布式队列中,例如Amazon SQS或RabbitMQ(文件将不起作用)。
通过使用这样的分布式队列,一个主机获取的项目将不会被其他主机看到(从而避免了重复处理)。