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

Какая разница между моделями передачи сообщений и общей памяти concurrency?

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

Быстрее

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

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

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

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

Ответ 7

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

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

Ответ 8

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