我如何保证在GPARS ThreadPool中执行/表示任务的顺序



我正在使用GPARS线程池运行一组任务。任务执行时间从几秒钟到20分钟都非常可变。(这些是Cucumber功能文件FWIW。)

幸运的是,features列表中的最后一个任务需要最长的运行时间,因此整个过程坐在那里执行runtest('australian_government_rebate.feature')25分钟时,所有其他线程都完成了。p>这意味着多线程无法履行其承诺。单线程测试需要65分钟才能运行,多线程测试48分钟。我希望30分钟或更高。

我的解决方案是按以前的执行时间对功能文件进行排序:

features = ...
features.sort { a, b -> b.executionTime() <=> a.executionTime() }
GParsPool.withPool(noOfCores) {
    features.eachParallel { feature ->
        runtest(feature)
    }
}

我的问题是:我可以保证以features中出现的顺序将功能呈现给GPARSPOOL吗?

对于这样的情况,我建议使用从一个排序的"功能"集合中的循环中启动的数据流任务,而不是并行集合:

PGroup group = ...
for(f in features) group.task {runtest(it)}

这将保证您打算的启动订单。

保证?不,但极有可能。我认为实际上看到您的方法是一个很好的方法,如果您的执行时间有很大不同。

相关内容

最新更新