我是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的道具工厂保留在伴侣对象中,但不确定前面的代码是否会破坏演员封装,或者它是否会影响演奏。
答案 0 :(得分:1)
无论是将Actor放置在对象内还是外部,都不会更改除类文件名之外的任何内容。关于共享一个Actor对象实例,这是非法的并且不起作用,但幸运的是你不能轻易陷入这个陷阱。