用例:我有一个包含id的文件(大约500 k),我的应用程序读取并处理这些文件(每个id的处理都很大)。因此,总的来说,这个处理需要大量的时间和内存。
我们需要实现的是通过扩展进程的数量(在不同的框/机器上运行Java进程),并将in的整个列表按某些固定的批处理大小划分,这样5个进程就开始处理文件中的项,并在完成处理时获取下一个批处理。例如:如果文件中的总项为100,而我的批处理大小为5,总共有3个进程,那么处理应该如下
这样,如果流程2在其他进程之前完成,那么它将开始处理16-20,并将此通知其他进程,以便下一个可用的流程选择项目21-25。
请注意,由于内存限制,我们不能在单个进程/主机上使用多个线程。
请有人提出解决方案/参考如何实现。
发布于 2018-09-03 03:12:41
听起来你有一个分布式计算问题。您有一组“要处理的东西”,并且希望在多台机器上进行处理。最简单和最典型的方法是将这些“事务处理”放到一个分布式队列中,比如Amazon或RabbitMQ (一个文件不能工作)。
通过使用像这样的分布式队列,由一个主机获取的项将不会被其他主机看到(从而避免了双重处理)。
https://stackoverflow.com/questions/52142423
复制相似问题