我们有一些代码需要运行得更快。它已经分析过了,所以我们想使用多个线程。通常我会设置一个内存队列,并让许多线程处理队列的工作并计算结果。对于共享数据,我会使用 ConcurrentHashMap 或类似的。
我真的不想再走那条路了。从我所阅读的内容来看,使用演员将产生更清晰的代码,如果我使用 akka 迁移到 1 个以上的 jvm 应该会更容易。真的吗?
但是,我不知道如何在演员中思考,所以我不知道从哪里开始。
为了更好地了解问题,这里有一些示例代码:
case class Trade(price:Double, volume:Int, stock:String) {
def value(priceCalculator:PriceCalculator) =
(priceCalculator.priceFor(stock)-> price)*volume
}
class PriceCalculator {
def priceFor(stock:String) = {
Thread.sleep(20)//a slow operation which can be cached
50.0
}
}
object ValueTrades {
def valueAll(trades:List[Trade],
priceCalculator:PriceCalculator):List[(Trade,Double)] = {
trades.map { trade => (trade,trade.value(priceCalculator)) }
}
def main(args:Array[String]) {
val trades = List(
Trade(30.5, 10, "Foo"),
Trade(30.5, 20, "Foo")
//usually much longer
)
val priceCalculator = new PriceCalculator
val values = valueAll(trades, priceCalculator)
}
}
如果有使用演员经验的人可以建议如何将其映射到演员,我将不胜感激。