より高速に実行する必要があるコードがいくつかあります。すでにプロファイリングされているため、複数のスレッドを利用したいと考えています。通常、メモリ内キューをセットアップし、キューのジョブを取得して結果を計算する多数のスレッドを用意します。共有データには、ConcurrentHashMap などを使用します。
あの道は二度と行きたくない。私が読んだことから、アクターを使用するとコードがきれいになり、akka を使用すると複数の 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)
}
}
アクターを使用した経験のある人が、これがアクターにどのようにマッピングされるかを提案していただければ幸いです。