当前位置: 首页 > 知识库问答 >
问题:

Akka vs Java 7期货

苏边浩
2023-03-14

我试图理解何时使用Akka Futures,并发现本文比主要的Akka文档更有帮助。所以看起来Akka期货和Java7期货做的完全一样。所以我问:

  • 在演员制度之外,阿卡期货比Java期货有什么好处?什么时候使用每个?
  • 在演员系统的背景下,为什么要使用阿卡未来?所有角色到角色的消息不都是异步、并发和非阻塞的吗?

共有2个答案

许博达
2023-03-14

关于你问题的第一部分,我同意阿列克谢·凯戈罗多夫的回答。

关于问题的第二部分:

当需要以非常具体的方式组合参与者的响应时,在内部使用Future非常有用。例如,假设Master参与者需要执行几个阻塞数据库查询,然后聚合它们的结果,因此Master将每个查询发送给工作者,然后聚合响应。如果查询结果可以按任何顺序进行聚合(例如,Master只是对行计数求和或其他什么),则Worker可以通过回调将其结果发送到Master。但是,如果结果需要以非常特定的顺序进行组合,则每个工作人员可以更轻松地立即返回未来,而主控可以更轻松地按照正确的顺序操作这些未来。这也可以通过回调来实现,但是,Master需要找出哪个查询结果是正确的顺序,优化代码会困难得多(例如,如果查询1的结果可以立即与查询2的结果聚合,那么通过使用Future该逻辑可以直接进入调度代码,其中所有查询的标识都是已知的,而使用回调则需要Master来识别查询结果,并确定其是否可以聚合。)将查询与已返回的任何其他查询结果合并)。

田琛
2023-03-14

Akka Futures采用异步通信方式,而Java7 Futures采用同步方式。是的,他们做同样的事情——交流——但是方式完全不同。

生产者-消费者对可以以两种方式交互:同步和异步。同步方式假定使用者有自己的线程,并执行阻塞操作以获取下一条生成的消息,例如BlockingQueue。take()。在异步方法中,使用者并不拥有线程,它只是一个至少有两种方法的对象:存储消息和处理消息。生产者调用store方法,就像它调用队列一样。将(m)放在同步方法中,但此方法也会在公共线程池上启动使用者处理方法的执行。

UPDT关于第二个问题(为什么要使用阿克卡未来):未来的创造看起来(而且)比演员的简单;未来链条的代码比参与者的代码更紧凑、更易于证明。但是请注意,Future只能传递一个值(消息),而参与者可以处理一系列消息。但是序列可以用Akka流处理。于是问题出现了:为什么要使用阿克卡演员?我邀请更有经验的开发人员回答这个问题。一般来说,我认为如果你的任务可以用期货来解决,那么就用期货,如果是用流,就用流,如果是用Akka Actors,就用Actors,否则就找另一个框架。

 类似资料:
  • java.util.concurrent.Callable对象可以返回由线程完成的计算结果,而runnable接口只能运行该线程。 Callable对象返回Future对象,该对象提供监视线程正在执行的任务进度的方法。 Future对象可用于检查Callable的状态,然后在线程完成后从Callable中检索结果。 它还提供超时功能。 语法 (Syntax) //submit the callab

  • 假设我有一个抽象的“生产者”实例: 我需要对它产生的每个(或一些)对象进行一些处理。所以,我做了类似的事情: …并以<code>Future[Seq[Future[T]]]结束。这没关系,但有点麻烦。我想摆脱外部的,只需要就可以了,但我想不出一个(非阻塞)转换,可以让我这样做。 有什么想法吗?

  • 假设我有一些账单,上面有开始日期和结束日期。 我要检查的商业规则是 例如,3月10日到4月9日大约相隔一个月,所以我用它来检查任何两个连续的账单开始日期(4月10日和3月10日)是否相隔一个月。 现在我的问题是求周期的长度。例如,假设我有以下数据集 我正在使用JodaTime库,所以我说类似这样的话 它返回0,这是正确的,但没有用处。 结果是1,尽管相隔一天。 有什么更好的方法来做到这一点?我可以

  • 分享 GitHub 上有趣、入门级的开源项目。

  • 周日->明谷-0 周一->赛宁-1 周二->Selasa-2 帮我谢谢

  • 我想在获得,和。 这是一条漫长的道路: 我的问题:如何将最后一部分压缩到函数? 我想归档的内容: p/s:的含义与标准数字格式字符串相同。像C#语法:

  • 我正在使用: Scala 2.10 游戏2.1 目前,我正在使用 类,但我愿意尝试另一个 API。 我很难将多个期货的结果组合成一个列表[(String, String)]。 以下 方法成功地将单个 Future 的结果返回到 HTML 模板: 方法执行 Web 服务 API 调用并返回 Future[play.api.libs.ws.Response]。方法 向 HTML 模板返回 List[(

  • 问题内容: 我在任何地方都找不到。我从返回标准JSON日期的API中获取了一些JSON。您可以通过在JavaScript控制台中运行以下代码来查看格式: 好吧,实际上,我正在使用的API不会返回毫秒部分,有时会返回一个时区而不是,因此日期看起来可能像以下任何一个: 解析这些日期有点麻烦。有没有办法使用解析这些日期? 我当前的解决方案是: 啊! 问题答案: 该DateTime格式实际上是ISO 86