在Java中使用并行化的链接过滤器

时间:2013-07-15 14:22:32

标签: java multithreading queue

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

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

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

在Java中是否有用于创建此类流程链的框架? 我知道如何手动完成(例如Queuing jobs in a processing chain in Java),但我特意寻找框架,因为

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

据说,在不了解您的要求的情况下很难提供建议。您应该了解哪些模型和实现存在,并找出最适合您的情况。在不知道细节的情况下,“我相信框架XYZ就是您正在寻找的”这样的建议只是将顾问描述为一个除了XYZ之外几乎不了解其他框架的人。尽管如此,我敢建议你看一下Dataflow Framework for Java,其模型足够,但有其局限性(例如执行节点可能无法阻止)。

答案 2 :(得分:1)

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