В чем принципиальная разница между akka и ThreadPool + BlockingQueue в одном процессе? - PullRequest
0 голосов
/ 29 октября 2018

Мы знаем, что Akka - одна из реализаций актерского паттерна. Без Akka я обычно реализую простой шаблон актера, используя ThreadPool + BlockingQueue. Таким образом, сообщение предлагается в очередь, и работники (актеры) принимают сообщение из очереди, а затем делают то, что должны делать. Конечно, такого рода реализация может быть только в ОДНОМ процессе.

Чтобы в одном процессе,

  1. Какая существенная разница между этими двумя (Акка против ThreadPool + BlockingQueue)
  2. Кроме того, в чем разница между моделью актера и моделью производитель-потребитель?

1 Ответ

0 голосов
/ 29 октября 2018

Актерская модель действительно очень похожа на модель производитель-потребитель (P-C).

Однако, если вы используете очередь блокировки с P-C, ваше приложение не будет полностью неблокирующим и асинхронным. Модель актера и Akka обещают, что все сообщения отправляются асинхронно и не блокируют отправителя.

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

Гораздо проще использовать Akka для создания высокопроизводительного и гибкого приложения, чем писать его самостоятельно. Вы получаете отказоустойчивость, управление ресурсами, прозрачность местоположения, маршрутизацию, распределенную асинхронную обработку, иерархический контроль из коробки. Не говоря уже о других платформах и библиотеках, использующих эти функции, чтобы дать вам еще больше (реактивные потоки, akka http и т. Д.). Для вас уже разработано множество шаблонов, так что зачем беспокоиться о своем собственном?

...