【问题标题】:Are there any hidden downsides to wrapping an Akka ActorRef in a thin wrapper class?将 Akka ActorRef 包装在一个薄包装类中是否有任何隐藏的缺点?
【发布时间】:2013-11-21 23:51:38
【问题描述】:

作为强类型并让编译器完成工作(而不是“希望”我记得),我想在我的基于 akka 的库中使用 ActorRef 以外的类型。

这样做有什么惩罚吗?基本上,包装器只会实现相同的方法(告诉、询问等),然后直接将其转发给演员并持有 ActorRef,这样我就可以拥有一个强类型的外观。

如果有人有任何见解,那就太好了。我对并发编程或演员模型不够熟悉,不知道这是否会以某种方式减慢速度。

编辑:以下是一些代码示例,如下所示。

例如。通常我会在 Akka 中这样做。

val actor = context.actorOf(Props[Whatever])

此时,它被键入为一个 ActorRef。因此,我的代码中的所有内容都必须与 ActorRefs 一起使用。这样做有什么缺点吗...

class Wrapper(props: Props)(implicit context: ActorContext) {
  val actor = context.actorOf(props)

  def ! (message: Any):Unit = {
    actor ! message
  }

  //insert a direct wrapper of other regular actor functions here.

}

然后,它将被调用并且行为与演员完全一样,除了我可以强输入我的设计。因为每个 Wrapper 都将使用封闭类进行类型化。

这有什么缺点吗?我意识到这不是绝对必要的,但留下强类型有点麻烦。

对我来说,我想到的是,如果这个类将在某个设置的线程上运行,并防止下面的 akka actor 像往常一样异步运行(与许多共享线程池等交换) ...因为我假设行为只发生在演员身上,所以我的班级可能会设置在其他地方并成为瓶颈。

【问题讨论】:

  • 我想看看你的概念更详细的解释(代码)。我怀疑它不是真的可行,至少不能超出非常简单和高度限制的情况。

标签: scala akka


【解决方案1】:

我认为你应该看看Typed Actors

猜你喜欢
  • 2021-07-22
  • 2018-03-10
  • 2012-04-29
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 2014-06-13
相关资源
最近更新 更多