【发布时间】: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 像往常一样异步运行(与许多共享线程池等交换) ...因为我假设行为只发生在演员身上,所以我的班级可能会设置在其他地方并成为瓶颈。
【问题讨论】:
-
我想看看你的概念更详细的解释(代码)。我怀疑它不是真的可行,至少不能超出非常简单和高度限制的情况。