дизайн scala/akka/stm для большого общего состояния?

Я новичок в Scala и Akka и рассматриваю возможность их использования для решения проблемы. Предположим, у меня есть вычислительная машина (которая ищет решение). Я хотел бы распараллелить этот поиск как между процессорами, так и между узлами, предоставив каждому процессору на каждом узле собственный экземпляр механизма.

Входные данные движка состоят из небольшого количества скалярных входных данных и очень большой хеш-таблицы. Каждый экземпляр движка будет использовать свои скалярные входные данные для внесения небольшого локального изменения в хеш-таблицу, вычисления качества, а затем отбрасывать свои изменения (их не нужно фиксировать/просматривать каким-либо другим экземпляром движка). Значение качества будет возвращено какому-либо координатору, который выберет один из результатов.

Я кое-что читал о STM TransactionalMap как о средстве совместного использования состояния. Это кажется идеальным, но я не вижу полных примеров использования его в качестве общего состояния.

Вопросы:

  • Подходит ли для решения этой проблемы модель актер/стимул?
  • Можете ли вы показать конкретный пример того, как распределять общее состояние? (это Ref[TransactionalMap[,]] как сообщение?
  • Есть ли что-то другое в распределении общего состояния внутри узла, а не между разными узлами?

Пытливые умы хотят знать,

Аллан


person AllanC    schedule 02.08.2011    source источник


Ответы (1)


С точки зрения обработки разделяемой памяти не похоже, чтобы STM подходил здесь, потому что вы не хотите, чтобы изменения, сделанные в экземплярах движка, фиксировались в общей копии хеш-таблицы.

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

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

person David Eagen    schedule 30.08.2011