7

問題文: 並行して処理する必要がある証券のポートフォリオがあります。Java では、スレッドプールを使用して各セキュリティを処理し、ラッチを使用してカウントダウンを行いました。完了したら、マージなどを行います。

したがって、SecurityProcessor (アクター) にメッセージを送信し、すべての先物が完了するのを待ちます。最後に、MergeHelper を使用して後処理を行います。SecurityProcessor はセキュリティを受け取り、いくつかの i/o と処理を行い、セキュリティに応答します

  val listOfFutures = new ListBuffer[Future[Security]]()
  var portfolioResponse: Portfolio = _
  for (security <- portfolio.getSecurities.toList) {
    val securityProcessor = actorOf[SecurityProcessor].start()
    listOfFutures += (securityProcessor ? security) map {
      _.asInstanceOf[Security]
    }
  }
  val futures = Future.sequence(listOfFutures.toList)
  futures.map {
    listOfSecurities =>
      portfolioResponse = MergeHelper.merge(portfolio, listOfSecurities)
  }.get

この設計は正しいですか? akka を使用してこの一般的な問題を実装するためのより良い/よりクールな方法はありますか?

4

1 に答える 1

8
val futureResult = Future.sequence(
                  portfolio.getSecurities.toList map { security => (actorOf[SecurityProcessor].start() ? security).mapTo[Security] }
                ) map { securities => MergeHelper.merge(portfolio, securities) }
于 2011-11-08T09:30:32.293 に答える