将对象中的akka​​ Actor类嵌套到类的成员有什么含义?

时间:2014-12-03 10:15:31

标签: scala akka titan

我是scala和akka的新手,我遇到的代码看起来像这样:

object Foo extends App {
    class Bar extends Actor with ActorLogging{
        val graph: TitanGraph = _

        private def setGraph() = {
            graph = TitanFactory.open(...)
        }
        setGraph()
        ...
    }

    def startBar() {
        val barSystem = ActorSystem("BarSystem")
        for(i <- 0 until numActors) {
            val barActor = barSystem.actorOf(Props[Bar], name="BarActor" + i)
            ...
            barActor ! Start
        }
    }

    startBar
}

与?相比,这对性能有任何影响:

object Foo extends App {
    override def main(args: Array[String]): Unit = {
        val barSystem = ActorSystem("BarSystem")
        for(i <- 0 until numActors) {
          val barActor = barSystem.actorOf(Props[Bar], name="BarActor" + i)
          ...
          barActor ! Start
        }
    }

}

object Bar {
    val graph: TitanGraph = _

    private def setGraph() = {
        graph = TitanFactory.open(...)
    }
    setGraph()

    def props = Props[Bar]
    ...

}

class Bar extends Actor with ActorLogging{
    ...
}

在第一种情况下,您正在创建图表的多个实例,但在第二种情况下,我假设您使用的是跨工作人员共享的单个实例?

另外,我在某处读到,最好将Actor的道具工厂保留在伴侣对象中,但不确定前面的代码是否会破坏演员封装,或者它是否会影响演奏。

1 个答案:

答案 0 :(得分:1)

无论是将Actor放置在对象内还是外部,都不会更改除类文件名之外的任何内容。关于共享一个Actor对象实例,这是非法的并且不起作用,但幸运的是你不能轻易陷入这个陷阱。