我们有一个从某些光学媒体加载数据的工具,一旦将其全部复制到硬盘驱动器,它就会通过第三方工具运行以进行处理。我想优化这个过程,以便在读入每个文件时对其进行处理。问题是,第三方工具(我自然无法更改)有 12 秒的启动开销。在尽快完成整个过程方面,我能处理这个问题的最佳方法是什么?我可以在每次运行中将任意数量的文件传递给处理工具,因此我需要能够准确地确定何时运行该工具以获得最快的整体结果。被复制的数据可以是从一个大文件(在完全复制之前无法处理)到数百个小文件的任何内容。
问问题
25 次
1 回答
0
最简单的方法是创建并运行 2 个线程,一个用于运行工具,一个用于加载数据。启动 12 秒计时器并触发两个线程。在每个文件加载完成时检查经过的时间。如果 12 秒过去了,则将数据提取到运行该工具的线程中。重新开始加载数据以并行处理先前的批量。一旦先前的批量处理完成,重新启动 12 秒计时器并在每次文件加载完成时继续检查它。重复直到没有更多数据。
为了获得更好的结果,可能需要更复杂的解决方案。您可以进行一些基准测试来评估平均数据加载时间。由于小文件和大文件可能不同,因此可能需要对不同类别的文件(根据大小)进行多次评估。最佳资源利用将以新数据到达的相同速率处理数据。处理时间包括 12 秒的启动时间。基准测试应该为您提供处理线程数与读取线程数的比率(您还可以根据传入的文件大小减少/增加活动读取线程的数量)。实际上,这是多个生产者和消费者的生产者消费者问题的变体。
于 2012-11-29T21:45:47.790 回答