Я немного искал сайт, чтобы помочь понять это, но не нашел ничего сверхъестественного, поэтому я подумал, что опубликую мой пример использования и посмотрю, может ли кто-нибудь пролить свет.
У меня вопрос о масштабировании потоков jvm vs os при использовании в akka для операций io. С сайта akka:
Akka поддерживает диспетчеров для потоков с легким потоком событий, позволяющих создавать миллионы потоков на одной рабочей станции и на основе потоков, в которых каждый диспетчер привязан к выделенному потоку ОС.
Актеры, основанные на событиях, в настоящее время потребляют ~ 600 байт на актер, что означает, что вы можете создать более 6,5 миллионов актеров в 4-граммовом ОЗУ.
В этом контексте вы можете помочь мне понять, как это важно на рабочей станции с одним процессором (для простоты). Итак, для моего примера использования, я хочу взять список из 1000 "Пользователи", а затем обратиться к базе данных (или нескольким) для получения различной информации о каждом пользователе. Итак, если бы я отправлял каждую из этих задач "получить" актеру, и этот актер собирается выполнять IO, не будет ли этот блок действий основан на пределе потока os для рабочей станции?
Как актерская модель акка подталкивает меня к подобному сценарию? Я знаю, что я, вероятно, что-то пропустил, потому что я не очень хорошо разбираюсь в взаимодействиях vm threads vs os threads, поэтому, если один из умных людей здесь может записать это для меня, это было бы здорово.
Если я использую Futures, не нужно ли использовать wait() или get() для блокировки и ждать ответа?
В моем случае использования, независимо от актеров, получилось бы просто "чувство", как будто я делаю 1000 последовательных запросов к базе данных?
Если код справки полезен, чтобы помочь мне понять это, Java будет предпочтительнее, поскольку я все еще набираю скорость на синтаксисе scala, но явное текстовое объяснение того, как эти миллионы потоков могут взаимодействовать на одном процессоре машина при выполнении базы данных IO тоже будет хорошо.