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