2012-06-04 2 views
3

Я недавно начал изучать рамки Akka 2.0 и смог запустить некоторый код, не создавая актеров, которые выполняют простые вызовы базы данных оракула, выполняя простые вычисления и еще ничего, ничего в производстве.Как определить количество актеров, чтобы они появились в акке?

Что я хочу знать, существует ли общее правило или передовая практика для определения того, сколько актеров должны появляться для определенных типов задач? Скажем, например, у меня есть пул соединений из 200 подключений jdbc. Я могу создать актера для представления каждого соединения? Я создаю несколько из них и использую подход с круговым движением?

Спасибо.

ответ

8

Обратите внимание, что numberOf (players)! = numberOf (threads).

Вы должны создать актера для каждого объекта, который в противном случае передавал бы изменяемое состояние по потокам. Все, что касается модели актера, заключается в том, что оно должно изолировать изменчивое состояние, чтобы обменяться между ними были только неизменные сообщения. В результате вам больше не нужны блокировки, и вы можете легко рассуждать о безопасности потоков вашей программы, потому что все изменчивое состояние изолировано в актерах, и вы можете полагаться на структуру, чтобы должным образом передавать барьер памяти, когда это необходимо, например. при переключении актера из одного потока в другой.

Число потоков - это другой вопрос: это зависит от количества ядер и коэффициента блокировки для каждого потока, то есть от процента времени, которое он проводит, ожидая других потоков или подсистемы ввода-вывода. Например, если ваши актеры выполняют интенсивные вычисления ЦП (например, вычисляют Pi), тогда коэффициент блокировки будет близок к 0%. Если, однако, ваши актеры занимаются в основном I/O, вы можете легко принять коэффициент блокировки 90% или более.

Наконец, число потоков может быть вычислено следующим образом:

int threads = Runtime.getRuntime().availableProcessors() * 100/(100 - blockingCoefficient) 

, где blockingCoefficient представляет собой целое число в процентах от 0 до 99 включительно.

+0

Весь вопрос о выполнении операций блокировки в акковых акках немного запутанен: не предполагается, что они создадут выделенные потоки для таких операций блокировки и сохраняют строго запрещенные действия актеров, блокирование? Или также приемлемо полагаться на управление потоками Akka для этого? –

4

Вы можете создать столько актеров, сколько хотите, однако, вы ограничены примерно 2 миллиардами на одного родителя, также не забудьте остановить их, когда они будут сделаны. Кроме того, не создавайте своих актеров в качестве верхнего уровня, если они не являются актерами самого высокого уровня. (т. е. создавать актеров внутри актеров, используя context.actorOf вместо system.actorOf)

+2

Мне нравится часть, ограниченная примерно 2 миллиардами * на родителя *. :) –

+2

Вы можете сказать, что я «hugger дерева» –

Смежные вопросы