Есть ли название для этого шаблона параллелизма? - PullRequest
3 голосов
/ 29 сентября 2011

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

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

Решение: переместить данные в свой собственный класс.Используйте фоновый поток, чтобы полностью выполнить перезагрузку и проверить данные.Затем, когда он будет готов, замените старую ссылку на данные новой.

Эта ссылка должна быть изменчивой, чтобы обеспечить видимость для всех потоков.

Пока не обязательно, чтобы критический путькод всегда имеет самые последние доступные данные, это прекрасно работает, с абсолютным минимальным влиянием на производительность (все данные проходят через изменчивую ссылку).

Реальный вопрос в том, есть имя для этого шаблона проектирования параллелизма ?

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

Ответы [ 4 ]

4 голосов
/ 29 сентября 2011

Для меня это выглядит как атомарная ссылка на объект значения

Значение объекта является постоянным объектом. Это просто представляет значение, то есть оно представляет значение с момента, когда вы вызываете конструктор, до конца его жизни (без изменения состояния). Будучи объектом значения, он автоматически поддерживает потоки.

Элементарная ссылка на него является лишь центральной точкой для доступа к последней версии объекта Value.

Язык Clojure называет его "ref".

Я нашел сообщение в блоге о шаблоне дизайна в форме GoF, которое выглядит так, как вы хотите: http://tobega.blogspot.com/2008/03/java-thread-safe-state-design-pattern.html

EDIT:

Рич Хики (создатель Clojure) определяет его как идентичность: «Предполагаемая сущность, которую мы связываем с рядом причинно-следственных значений (состояний) во времени».

Источник: http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey

2 голосов
/ 29 сентября 2011

Может ли двойная буферизация быть термином, который вы ищете?

0 голосов
/ 05 октября 2011

Я собираюсь заключить, что нет известного имени для этого шаблона .

Концепции из clojure четко соответствуют тому, что я здесь описал, но Ref и Identity недостаточно описательны для имени шаблона проектирования в Java.Спасибо @Thiago за указание на это.

Спасибо также @Ed за указание на то, что двойная буферизация графика и аппаратное обеспечение - очень похожая концепция, но опять-таки она не работает какимя шаблона проектирования в Java.

В моих целях я собираюсь использовать что-то вроде Atomic Build и Swap с коллегами, чтобы мы могли иметь ручку для этого частовстречающийся дизайн.

0 голосов
/ 29 сентября 2011

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

...