首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java (流)的生产者消费者[线程/处理]

使用Java (流)的生产者消费者[线程/处理]
EN

Stack Overflow用户
提问于 2018-05-01 18:51:20
回答 2查看 610关注 0票数 0

我正在做一个项目,本质上是一个很长的生产者/消费者链。这意味着第一个进程从用户获取数据(巨大的csv文件),逐行处理数据,传递到另一个进程/线程,该进程/线程消耗这些数据,进程然后再传递到另一个进程,以此类推。

这条链大约有8-10个单元长,每个单位都是消费者,然后是生产者。

我已经考虑过使用AWS lambdas来做这件事。我也可以使用Java流。我在AWS中看到的优点是,您可以在每个节点上设置单独的节流限制。

因此,如果您的节点的任务是更新dynamodb记录,我们可以节流此节点以匹配dynamodb的写入单元等等。

我发现使用lambda的另一个优势是,我不必编写代码来管理多处理(或多线程),而且我的数据处理将不依赖于我选择的硬件--我也可以通过选择一个低级硬件来节省成本,它的唯一工作将是充当第一个生产者,但我仍然会为aws lambda付费。

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

回答 2

Stack Overflow用户

发布于 2018-05-02 01:36:14

看起来,reactive streams (而不是java流或AWS )是最适合您的任务的工具。它们规定:

  • 反压力,即平衡消费者和生产者的速度。
  • 流水线链所有步骤的并行执行
  • 为同一个生产者连接多个使用者

有许多reactive streams实现: JavaRx2、项目反应堆(包含在Spring 5中)、Akka等。

票数 3
EN

Stack Overflow用户

发布于 2018-05-02 00:20:09

听起来您应该使用step函数将lambda链接在一起。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50122163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档