gpt4 book ai didi

java - 使用 Java(流)多线程/处理的生产者消费者

转载 作者:行者123 更新时间:2023-12-02 02:10:16 25 4
gpt4 key购买 nike

我正在开发一个项目,该项目本质上是一个长生产者/消费者链。这意味着第一个进程从用户处获取数据(巨大的 csv 文件),逐行处理数据,传递到使用该数据的另一个进程/线程,处理然后传递到另一个进程/线程,依此类推。
该链大约有 8-10 个单元长,每个单元充当消费者,然后充当生产者。
我曾考虑过使用 AWS lambda 来执行此操作。我还可以使用 Java 流。我在 AWS lambda 中看到的优点是您可以在每个节点上设置单独的限制。
因此,如果您的节点的工作是更新 dynamodb 记录,我们可以限制该节点以匹配 dynamodb 的写入单元等。
我看到使用 lambda 的另一个优点是我不必编写代码来管理多处理(或多线程),并且我的数据处理不会依赖于我选择的硬件 - 我还可以通过选择来节省成本一个低级硬件,其唯一的工作就是充当第一个生产者,但我仍然需要为 aws lambda 付费。

  1. 如果我使用 Java lambda 并以与使用 AWS lambda 相同的方式使用它们,使用 Java 流是否相似?我可以在 Java lambda 中使用限制吗?
  2. 如果我使用 Java 流,是否有一种简单的方法来管理多处理(线程)。
  3. 除了限制和管理池之外,使用 lambda 还有其他优点吗?有什么缺点吗?
  4. 除了上述两种之外,还有其他选择吗?
  5. 如果我希望链中的某些节点有多个消费者怎么办?例如消费者消费数据,处理并将其传递给链中的下一个,但我们还必须记录数据或将其存储在数据库中。

最佳答案

看起来 react 流(而不是java流或AWS lambdas)是最适合您的任务的工具。他们提供:

  • 背压,即平衡消费者和生产者的速度
  • 并行执行管道链的所有步骤
  • 为同一生产者连接多个消费者

有许多响应式(Reactive)流实现:JavaRx2、Project Reactor(包含在 Spring 5 中)、Akka Streams 等。

关于java - 使用 Java(流)多线程/处理的生产者消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50122163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com