java - Java 中具有并行化的链式过滤器

标签 java multithreading queue

我试图通过应用一系列转换t0, t1, ..., tn输入解析为输出。执行将是一个链:

输入 -> t0 -> t1 -> ... -> tn -> 输出

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

Java中有没有创建这样的流程链的框架? 我知道如何手动执行此操作(例如 Queuing jobs in a processing chain in Java ),但我专门寻找一个框架,因为

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

最佳答案

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

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

关于java - Java 中具有并行化的链式过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17656537/

相关文章:

java - ArrayList 在不同线程中为空

c# - 如何使用 C# 4 中的 TPL 创建常量 Processing "Flow"

java - 日志信息显示在嵌入式 jetty 中,但当应用程序部署到 tomcat 时不显示

Java 文本区域中的流水号

java - 尝试为 ColdFusion 项目安装 Sean Corfield 的脚本,出现类未找到错误

multithreading - Scala future 执行

c# - SHA256 可以多线程来提高速度吗?

c++ - 使用 STL 队列的循环队列?

c++ - 图形中的DFS需要多少时间间隔?

java - 如何在java标签框中输入摄氏度?