parallel-processing - 在 Java 中“即时”生成并行执行任务
问题描述
我有一些要在 Java 中并行执行的任务。我想根据我“实时”收集的数据生成下一个任务来执行自己的任务(主要取决于哪些其他任务已经完成以及它们的结果是什么)。
理想情况下,我正在寻找一个像这样构造的执行器:
new CallbackThreadPoolExecutor(Iterator<Callable<T>> generator)
我想生成器有一些关于执行进度的内部状态记录信息,并且基于这些信息,每当调用 next() 时,它都会生成下一个任务。
请注意 ThreadPoolExecutor 需要对任务进行排队,但我想在必须做出决定时使用最新信息。
这是一个笨拙的解决方法:创建一个带有 nThreads 任务的 ThreadPoolExecutor,每个任务都将在循环中调用生成器。但是在 Java 中是否有更惯用/更有效的方式来做到这一点?(也许使用 ForkJoinPool?)
这个问题似乎解决了一个相关的问题(一个非常大的任务列表)但这里的问题是不同的:我想即时做出决定 - 你可以假设任务的数量不是太大(但我可能不知道提前的确切任务数量)。
典型应用: 假设给定一个有向无环图,其顶点是任务,其边代表依赖关系。只有当它的所有祖先都完成时,我们才能执行一项任务。我们想使用多个工作人员来处理所有任务,但是由于我们不知道每个任务需要多长时间,我们希望仅在工作人员空闲时选择下一个任务分配给工作人员,基于最多图的-to-date 状态(理想情况下,我们只想选择祖先已经完成的任务;在这些任务中,也许我们希望优先考虑具有许多依赖项的任务)。
解决方案
推荐阅读
- c# - UWP,有时 AppWindow.TryCreateAsync 会抛出 COMException“类未注册”
- sql - SELECT 中的 SQL WHERE 语句?
- java - 在 GraphQL-java 中为 GraphQL 枚举返回不同的值
- arrays - 我的 3D 数组长度为 2,但在运行时访问索引 2 恐慌
- javascript - 如何在同一个 Contao 页面上获取 jQuery 和 Mootools?
- firebase - 访问另一个项目中的 firebase 函数环境变量
- memory-management - 系统中的字大小和存储单元大小
- java - 如何比较并行数组中的值以消除重复项?
- java - 如何管理 Tomcat 的 reloadable="true" 设置的 CPU 使用率?
- r - R中特定数量数据点的功能