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

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

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

Благодарю.

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



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

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

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

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

```

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