在一个瘦的包装类中包装Akka ActorRef是否有任何隐藏的缺点?

时间:2013-11-10 00:49:09

标签: scala akka

作为一个强类型并且让编译器完成工作(而不是“我希望”记住)的一个,我想为我的基于akka的库使用除ActorRef之外的类型。

这样做是否有任何惩罚?基本上,包装器只会实现相同的方法(告诉,询问等等),然后直接将它转发给actor并保持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不像通常那样异步(与许多共享线程池交换等等) ...因为我假设这种行为只发生在演员身上,所以我的班级可能会设置在其他地方并且瓶颈。

1 个答案:

答案 0 :(得分:1)

我认为你应该看看Typed Actors