Как определить количество актеров, которые появляются в акке?
=============================================================

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

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

Благодарю.

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

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

Наконец, количество потоков можно рассчитать так:

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



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