Актеры JMS и Scala имеют теоретическое сходство, но не думают, что они обязательно решают одни и те же проблемы архитектурно. Считается, что действующие лица - это легкая альтернатива параллельности совместно используемой памяти, где случайные расы и тупики, как правило, труднее создать случайно. JMS - это сложный API, предназначенный для охвата прямого обмена сообщениями, публикации / подписки, транзакций, интеграции EJB и т. Д.
Ближайшим JMS-эквивалентом для субъекта будет управляемый сообщениями компонент, поддерживаемый непостоянной, нетранзакционной, неопубликованной / подпоследовательностью. Я назову это «простым компонентом JMS».
Теперь к вашим вопросам.
Трудно говорить о производительности, поскольку JMS - это спецификация, а не реализация. Тем не менее, при использовании простого JMS-компонента, я ожидаю, что производительность будет примерно одинаковой, возможно, с небольшим преимуществом для актера во времени и памяти. Когда вы добавляете в JMS такие возможности, как паб / саб, транзакции и т. Д., Производительность, естественно, будет падать еще больше, но затем вы пытаетесь сравнить яблоки с апельсинами.
Что касается масштабируемости, простые компоненты JMS должны масштабироваться почти так же, как актеры. Добавление транзакций в JMS, естественно, повредит масштабируемости на величину, зависящую от объема транзакций.
Более широкий вопрос о том, что делают актеры, чего не может JMS. Ну, без встроенного паба или транзакций может показаться, что актеры отнимают JMS - и в целом это правда. Но вот в чем дело: актерам требуется так мало кода, что я с радостью могу использовать их для очень тонкого параллелизма. В обычном Java-коде я могу сказать: «Я не чувствую желания разбираться с JMS и его зависимостями или кодом, который ему требуется и т. Д., Поэтому я просто создаю поток, использую блокировку и делюсь структурой данных». С актерами Scala у меня гораздо больше шансов сказать: «Я просто соберу актера и продолжу».
Есть также философское различие в дизайне. Актеры имеют простую, встроенную концепцию иерархий супервизоров. Актеры, как правило, используются в дизайне «пусть ломятся». Если актер по какой-то причине умирает, то другой актер отвечает за решение, что с ним делать, например, перезапуск этого актера, убийство группы актеров и перезапуск всех из них, или убийство группы актеров и самого себя, чтобы какой-то другой актер мог разобраться с проблемой. Такие вещи могут добавляться в JMS, но они не являются ядром API и должны каким-то образом управляться извне.
Кстати, для библиотеки актеров Scala, которая больше перемещается в сферы, которые охватывает JMS, см. Akka . Акка также применяет декларативный подход ко многим распространенным стратегиям иерархии субъектов.