Розетки один-к-одному. Вам нужно несколько сокетов, если вы хотите отправить одну и ту же вещь нескольким процессам. С общей памятью вы можете иметь несколько читателей, а также несколько писателей.
Розетки ресурсоемкие. Каждое сообщение проходит через ОС. Используя разделяемую память, вы отображаете разделяемую память, но один раз в память вашего приложения, и с этого момента вы можете ее использовать. Тем не менее, вам все равно нужно пройти через ОС, когда вы использовали общую память; см. ниже.
Сокеты синхронизируются (если вы не используете UDP). С разделяемой памятью вам почти неизбежно необходим какой-то дополнительный механизм, чтобы сообщать другим процессам, что чтение / запись в разделяемую память в порядке / не в порядке. Не делайте этого, и у вас возникнут проблемы с поврежденной памятью. Пример: Предположим, что процесс A начинает чтение разделяемой памяти чанка, но частично выгружается из чтения. Процесс B записывает в тот же кусок общей памяти. Когда процесс А перезапускается и продолжает читать разделяемую память, он прочитал путаницу старых и новых данных. Чтобы предотвратить это, вы все равно проходите через ОС, когда используете общую память.
Довольно просто преобразовать набор приложений на основе сокетов в тот, который использует сетевые сокеты. Вы можете распространить обработку на все машины в вашей лаборатории или даже дальше. просто не могу сделать это с общей памятью. Вы привязаны к одной машине с решением на основе общей памяти.
Сокеты предназначены для небольших объемов данных, разделяемая память - для больших объемов данных. Существуют разные механизмы для решения разных проблем.