Реагировать на фьючерсы

Я пытаюсь использовать подход «разделяй и властвуй» (также известный как вилка / соединение) для проблема с номером. Вот код:

import scala.actors.Futures.future

private def compute( input: Input ):Result = {
  if( pairs.size < SIZE_LIMIT ) {
    computeSequential()
  } else {
    val (input1,input2) = input.split
    val f1 = future( compute(input1) )
    val f2 = future( compute(input2) )
    val result1 = f1()
    val result2 = f2()
    merge(result1,result2)
  }
}

Он работает (с хорошим ускорением), но будущий метод apply, похоже, блокирует поток, и пул потоков значительно увеличивается. А когда создается слишком много потоков, вычисления останавливаются.

Есть ли какой-то метод react для фьючерсов, который освобождает поток? Или любой другой способ добиться такого поведения?

РЕДАКТИРОВАТЬ: Я использую scala 2.8.0.final

7
задан Nathan Kleyn 8 November 2011 в 04:22
поделиться