В чем разница между моделями параллельной передачи сообщений и совместной памяти? - PullRequest
43 голосов
/ 05 декабря 2009

Поправь меня, если я ошибаюсь, но я удивлен, что об этом раньше здесь не спрашивали ...

Ответы [ 8 ]

94 голосов
/ 05 декабря 2009

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

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

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

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

Хорошо, глупая аналогия!

16 голосов
/ 04 июня 2014
  1. В модели с общей памятью память разделяется взаимодействующими процессами, которые могут обмениваться информацией посредством чтения и записи данных, но при передаче сообщений связь осуществляется посредством сообщений, которыми обмениваются взаимодействующие процессы.
  2. Общая память помогает запускать процессы одновременно, но передача сообщений не может.
  3. Средство передачи сообщений имеет две операции: отправка (сообщение) и получение (сообщение). Процесс которого имеет фиксированный или переменный размер.
  4. Передача сообщений полезна для обмена меньшими объемами данных, поскольку не нужно избегать конфликтов. Передача сообщений также проще в реализации, чем разделяемая память для межпроцессного взаимодействия.
  5. В системах с общей памятью системные вызовы требуются только для установки областей с общей памятью. Как только разделяемая память установлена, все обращения рассматриваются как обычные обращения к памяти, и помощь от ядра не требуется.

Быстрее

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

10 голосов
/ 05 декабря 2009

Модели передачи сообщений (например, Erlang) не имеют общего состояния; вся синхронизация и связь осуществляется путем обмена сообщениями. Модели с общей памятью обмениваются данными посредством чтения / записи в блоки общей памяти, которые защищены семафорами или чем-то подобным.

4 голосов
/ 05 декабря 2012

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

3 голосов
/ 23 декабря 2010

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

2 голосов
/ 06 августа 2014

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

Может быть нет принципиальных различий между ними в отношении их вычислимости (при определенных условиях).

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

В частности, эта статья ABD @ JACM'95 показывает, что

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

1 голос
/ 26 января 2019

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

1 голос
/ 14 апреля 2018

Чтобы различать передачу сообщений и разделяемую память, рассмотрим пять вещей:

  1. связь: - В случае передачи сообщений связь зависит от программиста, например, с каким процессом он будет взаимодействовать. но в случае общей памяти связь осуществляется автоматически.
  2. распределение данных: -m.p (вручную) s.m (автоматический)
  3. H / W поддержка: - м.п. (простой) s.m (Обширный, потому что он должен быть умным, чтобы автоматически определять межпроцесс)
  4. правильность: -m.p (сложно) см (менее сложно)
  5. производительность: -m.p (сложно) см (очень сложно) `
...