Які плюси та мінуси спілкування між процесами Inter здійснюється через сокети та спільну пам'ять?


9

Я розумію, що двома з багатьох інших варіантів міжпроцесорної комунікації можуть бути:

  1. Спільна пам'ять
  2. Розетки

Насправді я бачив, що ці два варіанти піддаються Intellij Idea для налагодження програми Java. Хочу знати, які плюси і мінуси кожного підходу.


Більш сучасний метод - D-Bus.
ott--

@ ott - Чи не використовує D-Bus сам розетки домену Unix?

@BrianMarshall Дійсно, домени та tcp / ip сокети.
ott--

Є відповіді тут: stackoverflow.com/a/1844919/632951
Pacerier

Відповіді:


11

Кілька переваг для кожного з моєї голови. Зауважте, що деякі з цих пунктів можуть застосовуватися не у всіх випадках; це лише загальні спостереження.

Розетки

Простий і керований. За необхідності можна поширити на мережеві розетки з невеликими або відсутніми змінами. Модель програмування вимагає серіалізації, що, в свою чергу, вимагає думати про те, які дані фактично передаються від А до В. Синхронізація обов'язково вбудована в механізм зв'язку; не потрібна інша синхронізація.

Спільна пам'ять

Не обов'язково вимагає систематичного виклику (тому потенційно швидше). Спільний доступ не вимагає прямої передачі даних - дані можуть бути доступні, щоб одержувач не отримував (пропускну здатність не потрібно витрачати на передачу даних, які одержувач не використовуватиме). Жоден крок серіалізації / десеріалізації не означає часу, витраченого на комунікаційні витрати.


4
+1: розетки збільшуються до розподілених систем, тоді як спільна пам'ять набагато швидша.
mouviciel

@tylerl Чому для загальної пам’яті не потрібен системний виклик?
Geek

@Geek: Прочитайте, як реалізується управління віртуальною пам'яттю в сучасних ОС. В основному, під капотом спільна пам'ять реалізується майже ідентично звичайній процесорній пам'яті. Так буває, що одна і та ж фізична сторінка спеціально відображається у 2 (або N) різних процесах. Але як тільки це зіставлення встановлено, * px = 5 видає однаковий набір інструкцій незалежно від того, px вказує на звичайну змінну або якщо вона вказує всередині сегмента спільної пам'яті.
DXM

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

1
@gbjbaanb Я думаю, що технічно ви серіалізуєте дані, якщо вони передаються у вигляді послідовних рядків бітів, незалежно від структури кодування.
tylerl

6

Розетки одне до одного. Вам потрібно кілька розеток, якщо ви хочете надіслати одне й те саме в декілька процесів. Маючи спільну пам'ять, ви можете мати декілька читачів, а також кілька авторів.

Розетки є ресурсомісткими. Кожне повідомлення проходить через ОС. За допомогою спільної пам’яті ви відображаєте спільну пам’ять, але один раз в пам’яті програми та з цього моменту це вже використовувати. Однак вам все одно потрібно пройти ОС, коли ви використовували спільну пам'ять; Дивись нижче.

Розетки синхронізовані (поки ви не використовуєте UDP). За допомогою спільної пам’яті вам майже неминуче потрібен додатковий механізм, щоб повідомити іншим процесам, що читати чи записувати у спільну пам’ять добре / не в порядку Не робіть цього, і у вас виникнуть проблеми з пошкодженою пам'яттю. Приклад: Припустимо, процес A починає зчитувати фрагмент спільної пам'яті, але замінюється частково через прочитане. Процес B записує ту саму частину спільної пам'яті. Коли процес A перезапускається і продовжує читати спільну пам'ять, те, що він прочитав, - це мішанка старих і нових даних. Щоб цього не допустити, ви все одно проходите через ОС під час використання спільної пам'яті.

Перетворити набір програм на основі сокетів досить просто в той, який використовує мережеві сокети. Ви можете поширити обробку на всі машини у вашій лабораторії або навіть далі. просто не можу зробити це спільною пам'яттю. Ви заблоковані на одній машині із спільним рішенням на основі пам'яті.

Розетки призначені для малих обсягів даних, спільної пам’яті для великих обсягів даних. Існують різні механізми вирішення різних проблем.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.