2014-12-03 48 views
1

我是新來的Scala和阿卡和我跨看起來是這樣的代碼來:有哪些中的對象嵌套的阿卡演員類的類成員的含義是什麼?

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{ 
    ... 
} 

在第一在這種情況下,您創建了圖的多個實例,但在第二種情況下,我假設您正在使用跨工作人員共享的單個實例?

另外,我讀的地方,它是很好的做法,以保持演員的道具廠的同伴對象,但不知道以前的代碼休息演員封裝,或者如果它會影響性能,在所有。

+3

如果你擔心性能,你就應該剖析它。該'Bar'類可能包含對其父對象的引用,但它是非常不可能,這麼小的差異將有什麼樣的任何真實世界的應用顯着的效果。擔心績效成爲問題時,而不是之前。 – lmm 2014-12-03 10:24:06

+0

謝謝!我其實也想知道它對泰坦圖的影響。我問的原因是寫圖表看起來非常昂貴,速度很慢。我不知道這是否是因爲我們有多個實例,並且每次調用圖形對每個I/O他們之間作出選擇,或者如果它是系統的體系結構。我也可以完全脫離基地。 – kodemonkey 2014-12-03 21:02:48

+0

說真的,描述它。 JProfiler有一個免費的試用版。 – lmm 2014-12-03 22:40:38

回答

1

無論你把一個演員的對象內部或外部不改變除了類文件名什麼。關於共享單個Actor對象實例,這是非法的,並且不起作用,但幸運的是,您不能輕易陷入此陷阱。