среда, 26 августа 2015 г.

[prog.throughts;flame] Из статьи "Don't use Actors for concurrency" не следует ущербность Actor Model...

Поскольку данная тема всплыла, то ознакомился со статьей "Don't use Actors for concurrency", на которую давали ссылку.

На мой далеко не беспристрастный взгляд из этой статьи, а так же из аналогичных аргументов человека на RSDN, отнюдь не следует, что модель акторов -- это антипаттерн. Более того, Chris Stucchio, автор статьи от 2013-го года явно указывает, что все его соображения являются наездами на Scala и Akka: "Let me emphasize that this is a very scala-specific rant."

Собственно, всю дискуссию можно закрывать на первом же примере из обсуждаемой статьи. Там автор говорит, что FooActor не имеет состояния, но Akka все равно сериализует все запросы к нему так, чтобы запросы обрабатывались в один поток, на одной нити. И что это убивает конкурентность. А вот Future -- нет.

Ну да, в Akka так. Впрочем, в Java/Scala мире много сирого и убогого, ну да тема не о том :)

А вот в SObjectizer не так. Начиная с версии 5.4.0, т.е. уже год как, у агентов могут быть как not-thread-safe обработчики событий (меняют состояние агента), так и thread-safe (не меняют состояния). И диспетчер adv_thread_pool позволяет одновременно запускать несколько thread-safe обработчиков на разных нитей. Т.е. в SO-5 такой проблемы с FooActor не было бы в принципе.

Уж не знаю, разрешает ли каноническая модель акторов (если таковая существует) параллельную обработку сообщений одним актором. Но, как я говорил ранее, есть теория, а есть конкретные инструменты, с которыми приходится иметь дело на практике. Один инструмент позволяет параллельную обработку сообщений и в этом случае модель акторов не ущербна. Второй инструмент не позволяет, откуда следует вывод, что модель акторов отстой антипаттерн :)

Комментариев нет: