Подтвердить что ты не робот

Список моделей concurrency

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

Каковы некоторые модели concurrency? Я слышал о передаче сообщений, где нет общей памяти. фьючерсы, которые сразу возвращают объект (поэтому он не блокируется) и позволяют разыменовывать исходную функцию, возвращающую значение позже, когда вам нужно блокировать, если результат еще не готов. Я слышал о сопрограммах, транзакционной памяти программного обеспечения и случайных других.

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

Каковы некоторые модели concurrency и что такое простое описание того, что они делают? Один за каждый ответ.

4b9b3361

Ответ 1

COM Threading (Concurrency) Модель

  • Однопоточные квартиры
  • Многопоточные квартиры
  • Разработка смешанной модели

COM-объекты могут использоваться в нескольких потоках процесса. Термины " Однопоточные апартменты * t" (STA) и "Многопоточная квартира" (MTA) используется для создания концептуальной основы для описания отношения между объектами и потоками, concurrency отношения между объекты, средства, с помощью которых метод вызовы доставляются объекту, и правила прохождения интерфейса указатели среди потоков. Компоненты и их клиенты выбирают между следующие две квартиры модели в настоящее время поддерживается COM:

Модель с однопоточной квартирой (STA): Один или несколько потоков в процессе использования COM и вызовы COM-объектов синхронизированный с помощью COM. Интерфейсы перемешанный между нитями. вырожденный случай однопоточного квартира, где только одна нить в данном процессе использует COM, называется однопоточная модель. предыдущий Microsoft и документация иногда упоминается к модели STA просто как "модель квартиры". Многопоточная Модель квартиры (MTA): одна или несколько потоки используют COM и звонки в COM объекты, связанные с MTA, являются сделанные непосредственно всеми потоками связанных с MTA без каких-либо интерпозиция системного кода между вызывающий и объект. Поскольку несколько одновременные клиенты могут звонить объекты более или менее одновременно (одновременно на многопроцессорном систем), объекты должны синхронизировать их внутреннее состояние само по себе. Интерфейсы не сортируются между потоки. Предыдущие Microsoft информации и документации иногда упоминается эта модель как "свободная резьба". И Модель STA и модель MTA могут быть используется в том же процессе. Это иногда называемый "смешанная модель".


Другие модели согласно Википедии

Существует несколько моделей параллельных вычислений, которые могут быть использованы для понимать и анализировать параллельные системы. Эти модели включают в себя:

Ответ 2

Модель актера

Я слышал о передаче сообщения, где нет общей памяти.

Это о актерах в стиле Эрланг?

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

В нескольких словах Актеры - это объекты, которые вообще не имеют общих данных, но могут использовать асинхронные сообщения для взаимодействия. Актеры могут находиться на одном или разных хостах и ​​использовать интересную политику обработки ошибок (когда произошла ошибка - актер просто умирает).

Вы должны прочитать об этом в Erlang и Scala docs, это очень простой и прогрессивный подход!

Главы 3, 17, 17.11:

http://www.scala-lang.org/sites/default/files/linuxsoft_archives/docu/files/ScalaByExample.pdf https://en.wikipedia.org/wiki/Actor_model

Ответ 3

Futures

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

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

Существует четыре вида фьючерсов:

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

Ответ 4

Там также отображается карта/сокращение.

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

Вот как обрабатываются графические процессоры, функциональные языки, такие как LISP/Scheme/APL, и некоторые фреймворки (Google Map/Reduce) concurrency.

Ответ 5

Программная транзакционная память

В информатике, программном обеспечении транзакционная память (STM) является Механизм управления concurrencyаналогично транзакциям базы данных для контроль доступа к общей памяти в параллельные вычисления. Это альтернатива блокировке синхронизации. Сделка в этом контекст - это фрагмент кода, который выполняет ряд операций чтения и записи к общей памяти. Эти логически происходит в одном мгновенное время; промежуточные состояния не видны другим (успешным) сделки. Идея предоставления аппаратная поддержка транзакций возникла в бумаге и патенте 1986 года Том Найт [1]. Идея заключалась в популяризированный Морисом Херлихи и Дж. Элиот Б. Мосс [2]. В 1995 году Нир Шавит и Дэн Туйту распространил эту идею на программная память с программным обеспечением (СТМ) [3]. STM недавно была фокус интенсивных исследований и поддержки для практических реализаций растет.

Ответ 6

Coroutines

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

Ответ 7

Там также неблокируются concurrency, такие как команды сравнения и замены и load-link/store-conditional. Например, compare-and-swap (cas) можно определить так:

bool cas (int new_value, int current_value, int * location);

Эта операция затем попытается установить значение в местоположении на значение, переданное в new_value, но только если значение в местоположении совпадает с значением current_value. Это требует только одной инструкции и обычно используется блокировка concurrency (мьютексы/семафоры/etc.).

Ответ 8

IPC (включая MPI и RMI)

Привет,
на страницах вики можно найти, что MPI (интерфейс передачи сообщений) является методом общей методики IPC: http://en.wikipedia.org/wiki/Inter-process_communication
Еще один интересный подход - вызов удаленной процедуры. Например, Java RMI позволяет вам фокусироваться только на вашем домене приложения и шаблонах связи. Это "уровень приложения" concurrency.
http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136424.html

Существуют различные шаблоны проектирования/инструменты, доступные для обеспечения параллелизма модели разделенной памяти. Помимо упомянутых фьючерсов, вы также можете воспользоваться:
1. Шаблон пула потоков - фокусируется на распределении задач между фиксированным числом потоков: http://en.wikipedia.org/wiki/Thread_pool_pattern
2. Шаблон планировщика - контролирует выполнение потоков в соответствии с выбранной политикой планирования http://en.wikipedia.org/wiki/Scheduler_pattern
3. Схема реактора - встроить однопоточное приложение в параллельную среду http://en.wikipedia.org/wiki/Reactor_pattern
4. OpenMP (позволяет распараллеливать часть кода с помощью препроцессорных прагм)

С уважением,
Marcin

Ответ 9

Параллельная машина с произвольным доступом (PRAM) полезна для сложностей/приемлемости (подробнее см. славную книгу).

О моделях вы также найдете что-то здесь (by Blaise Barney)

Ответ 10

Как насчет корневое пространство?

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

Ответ 11

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