Scala актеры умной маршрутизации - PullRequest
2 голосов
/ 31 января 2012

Мне нужно выполнить несколько (скажем, 10) задач с меньшим количеством (то есть) 3 акторов.

Но я не хочу распределять все задачи в начале, потому что время выполнения может варьироваться.Вот почему мне нужно отправить всем им 1 задание, и когда он закончится, ему будет дано новое задание.Таким образом, когда первое задание занимает 3 секунды, а задание только ~ 0,5 с может быть выполнено за 3 секунды.

Имея список из 10 задач:

(() => Thread.sleep(3000); println("done long"}) :: (1..9).map({() => println("done short")})

Я хочу получить вывод:

done short
done short
done short
done short
done short
done short
done short
done short
done short
done long

Я мог бы написать актера менеджера, вернуть актеров менеджеру и снова распределить работу, но я надеялся найти фиксированное решение в Scala или Akka.

1 Ответ

3 голосов
/ 31 января 2012

Akka поддерживает диспетчеров и, в частности, кражу работы.Смотрите этот пост для деталей.

...