Шаблоны проектирования для параллельного проектирования на основе Agent/Actor

Недавно я попадал на альтернативные языки, которые поддерживают архитектуру actor/agent/shared nothing, т.е. scala, clojure и т.д. (clojure также поддерживает общее состояние).

До сих пор большая часть документации, которую я прочитал, фокусируется на уровне входа. Я ищу более совершенную документацию вдоль группы из четырех человек, но вместо этого ничего не основал.

Почему? Это помогает понять изменения в дизайнерском мышлении. Простые примеры просты, но в реальном Java-приложении (однопоточное) вы можете иметь объектные графы с 1000 членами со сложными отношениями. Но при разработке агента на основе concurrency он вводит совершенно новый набор идей для понимания при проектировании больших систем. то есть. Степень детализации агента - как много состояний должно управляться одним агентом - последствия для производительности и т.д. Или являются их хорошими шаблонами для сопоставления графов объектов общего состояния с агентской системой. советы по моделированию моделей доменов для проектирования. Обсуждения не о технологии, а о том, как BEST использовать технологию в дизайне (реальные "сложные" примеры, были бы замечательными).

Ответы

Ответ 1

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

В первую очередь, чтобы ваша голова обернулась вокруг концепций. Одна книга помогает вы делаете это Создание надежных распределенных систем при наличии ошибок программного обеспечения написанный Erlang Guru Joe Armstrong, где объясняется Concurrency ориентированное программирование в очень доступном виде. Фактически это доктор философии. тезис, но не позволяйте этому пугать вас. Это гораздо легче читать и приятно вступать в сделку, чем большинство обычных учебников.

Глядя на реальные системы, как правило, вы должны слишком много узнать о фактических язык для него тоже имеет смысл просто оценивать вещи. Для Erlang документация предоставляет методологию и поведение в области проектирования (Erlang speek для библиотек шаблонов проектирования). Это иллюстрирует шаблоны проектирования, наиболее часто используемые в этой настройке. И эти оказались эффективными в создании крупномасштабных систем, т.е. миллионов строк кода (сопоставимых с фактором от 4 до 10 других языков, таких как Java) и миллионы параллельных процессов, работающих на одной машине в распределенных кластерах машин. Недавним примером реальной живой системы является Facebook Chat.

Для других фреймворков я не могу вам помочь, я боюсь.

Ответ 2

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

Если вы еще не сталкивались с этим, Akka может вас заинтересовать - это "чисто" управляемая событиями структура актера, работающая на JVM.

Ответ 3

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

Я думаю, что смена ума - это самый большой барьер для перехода к параллельным архитектурам и языкам, и пока это не сломается, разработчики будут придерживаться простых в освоении парадигм стиля MS. Чтобы он действительно стал основным, он должен найти свой путь в школах и преподаваться вместе с С# и VB.

Мой ответ на вопрос 2080 программистов является "одновременно".