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