0

我正在尝试通过应用一系列转换将an 解析input为 an 。执行将是一个链:outputt0, t1, ..., tn

input -> t0 -> t1 -> ... -> tn -> output

一些转换应该并行化,以防止成为瓶颈。

是否有任何框架可以在 Java 中创建这样的流程链?我知道如何手动完成(例如,在 Java 的处理链中排队作业),但我专门寻找一个框架,因为

  • 具有缓存、等待等的较长(部分)多线程链的复杂性会很快变得复杂
  • 我有几个这样的链,并希望避免重新发明标准库中可能包含的内容
4

3 回答 3

1

我相信fork/join 框架(在 jdk 7 中)是您正在寻找的。它支持指定任务依赖关系并根据可用资源将作业拆分为更多并行块。

于 2013-07-15T14:27:55.937 回答
1

存在许多不同的执行模型来表达这样的转换链。转换可以是具有从输入队列读取的循环的线程,也可以是具有处理每个传入消息的方法的对象(隐藏在引擎盖下的线程和循环)。转换可能有单个输入或多个输入。它可能知道它的后继者并直接向它们发送结果,或者只是从方法返回一个值,并且单独描述的拓扑负责进一步的消息路由。当转换行为开始时,可​​能会或可能不会考虑保存结果的空间的可用性,等等。转换动作可能非常短,因此消息传递的开销很大,并且应该仔细优化消息传递(请参阅 Disruptor),或者为每个消息生成包装对象的普通链接队列就足够了。

据说,不知道您的要求,很难给出建议。您应该探索存在哪些模型和实现,并找出最适合您的案例。在不了解细节的情况下,诸如“我相信框架 XYZ 是您正在寻找的”之类的建议仅将顾问描述为除了 XYZ 之外几乎不了解其他框架的人。尽管如此,我还是建议你看一下Dataflow Framework for Java,它的模型已经足够了,尽管有其局限性(例如执行节点可能不会阻塞)。

于 2013-07-15T16:13:15.470 回答
1

正如阿列克谢所说的建议,让买家小心。我只是碰巧在 SourceForge 上维护了一个支持过滤器的 Fork/Join 框架。由于代码是免费和开源的,您可以按原样使用它或做您想做的事。TymeacDSE

于 2013-07-15T17:46:58.713 回答