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