我正在构建一个长时间运行的应用程序,该应用程序被建模为基于面向服务的体系结构的服务。称之为'serviceA'。它有一个活动来执行,每当调用API时调用'activityA'。在长时间运行的应用程序中运行并行任务
activityA有一个活动处理程序,它必须并行执行“n”个任务,然后合并并将结果返回给调用serviceA API的客户端。
我打算使用ExecutorService来实现这种并行性。
有2种方式与此先走:
在单身范围创建的ExecutorService,并将其作为活动的处理程序的属性。因此,同一个ExecutorService对象在服务的整个生命周期中都可用。当新的请求到来时,处理程序使用此ExecutorService对象提交并行任务。然后等待Future对象一定的超时时间。完成所有并行任务后,合并并返回activityA响应。
每次在活动处理程序中收到对activityA的请求时,都会创建新的ExecutorService对象。将并行任务提交给此对象,在某些超时时间内等待Future结果,合并结果,调用ExecutorService对象的关闭并返回activityA API响应。
因此,
哪2以上方法的应遵循?主要区别b/w 2是ExecutorService对象的生命周期。
如果这个数据有助于决策制定,那么该服务应该被称为每秒大约15k个事务处理?
第一种方法的优点是我们不会有创建和关闭新的ExecutorService对象和线程的开销。但是,当超时时间没有未来结果时会发生什么?线程是否自动关闭?它是否可用于任何将要进入ExecutorService线程池的新请求?或者它会处于某种等待状态,并吃掉记忆 - 在这种情况下,我们需要手动做些什么(以及什么)?
另外,我们调用future.get()时的超时时间是从我们进行此调用的时间还是从我们将任务提交给执行程序服务的时间?
请让我知道是否有任何2种方法是明显的方法来解决这个问题。
谢谢。
我想,它可能会帮助你http://reactivex.io/documentation/observable.html RxJava是执行并行任务的最佳解决方案之一,当然它更好,然后重新发明轮子。 – Ivan
谢谢伊凡的建议!可能会研究它。但是现在我想坚持使用ExecutorService,因为项目的周转时间较短。 –