System V IPC против POSIX IPC

84
  1. В чем разница между System V IPCи POSIX IPC?
  2. Почему у нас два стандарта?
  3. Как решить, какие функции IPC использовать?
Meghasyam
источник
2
У меня была одна причина, по которой я выбрал очереди сообщений sysv вместо posix. Возможность доставки сообщений по mtype не поддерживается в очереди сообщений posix. Я писал об этом в блоге ..
takladev 03
В книге Курта Уолла под названием « Linux Programming Unleashed 2nd Edition » , стр. 382, ​​сказано: « Я не знаю, были ли сделаны улучшения в Linux для решения этой проблемы, если кто-то знает, пожалуйста, расскажите». Сегодня я слишком часто сталкиваюсь с аналогичным выбором: Posix IPC или System V IPC, и мой подход состоит в том, чтобы тщательно понять, какой тип примитива IPC будет использоваться, потому что один имеет преимущества перед другим. Например, процесс может внезапно умереть, и что тогда? System V IPC is well known and commonly used, but the Linux implementation of it is badly broken.
eigenfield

Ответы:

106

Оба имеют одинаковые базовые инструменты - семафоры, разделяемую память и очереди сообщений. Интерфейс этих инструментов немного отличается, но основные концепции остаются теми же. Одно заметное отличие состоит в том, что POSIX предлагает некоторые функции уведомления для очередей сообщений, которых нет в Sys V. (См mq_notify().)

Sys V IPC существует уже давно, что имеет несколько практических последствий:

Во-первых, POSIX IPC менее широко применяется. Я написал оболочку Python для POSIX IPC и ее документации перечислены все, что я знаю о реализациях POSIX IPC на различных платформах .

На всех платформах, перечисленных в этой документации, Sys V IPC полностью реализован AFAIK, тогда как вы можете видеть, что POSIX IPC - нет.

Второе следствие их относительного возраста заключается в том, что POSIX IPC был разработан после того, как некоторое время использовался Sys V IPC. Таким образом, разработчики POSIX API смогли извлечь уроки из сильных и слабых сторон Sys V API. В результате POSIX API проще и удобнее использовать IMO, и я рекомендую его вместо Sys V. API.

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

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

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

Филипп Семанчук
источник
2
Есть одно важное различие, которое не удается выделить на страницах руководства и в других статьях, то есть в очередях сообщений sysv есть понятие доставки сообщений по mtype (в posix msgq этого нет). В некоторых случаях это могло быть важным элементом дизайна, и, по моему опыту, это оказалось препятствием для шоу. Я писал об этом в блоге .
takladev 03
После документации OpenGroup SysV IPC был частью SUS, начиная с выпуска 2, и нового интерфейса, начиная с выпуска 7. Действительно, один существует с тех пор, как долго, но оба являются частью SUS, поэтому оба являются частью POSIX.
Hibou57
23
  1. Я считаю, что основное отличие состоит в том, что все IPC POSIX являются потокобезопасными, в то время как большинство IPC SysV НЕ [ 1 ].
  2. Из-за войн Unix [ 2 ]. Спецификации Single UNIX (SUS) [ 3 ], также известный как POSIX, была создана для стандартизации интерфейсов на системах Unix , основанных.
  3. Возможно, вам нужен POSIX. Зависит исключительно от ваших требований.
Jweyrich
источник
11

System V IPC старше, а POSIX IPC новее. Однако есть некоторые отличия по некоторым аспектам. Не всегда Posix лучше System V.

  1. Семафоры, очереди и разделяемая память для Posix имеют строковые имена Ascii, тогда как в System V они задаются целыми числами.

  2. Семафоры System V позволяют автоматически освобождаться, если процесс умирает (флаг semop SEM_UNDO). Для Posix такого нет.

  3. В Linux и FreeBSD есть большое преимущество очереди posix, поскольку обработчик, заданный mq_open, в основном является дескриптором файла, который можно опросить / epolled / selected / kqueued.

Мадарс Ви
источник
Таким образом, кажется, что выбор зависит от типа примитива IPC, который будет использоваться. Есть некоторые, где Posix великолепен, но есть и другие, где великолепна System V. Если процесс внезапно умирает, и ни один API в мире не может перехватить такое событие, тогда примитивы IPC будут зависать или, следовательно, их обнаружение. Существуют различные варианты использования, в которых лучше всего работает Posix, а есть и другие варианты использования, в которых System V хорошо справляется с проблемой.
eigenfield
-3
  • Systen V и POSIX IPC - две разные, но связанные реализации одного и того же.

«Unix System V, обычно сокращенно SysV (и обычно произносится - хотя и редко пишется - как« System Five »), является одной из первых коммерческих версий операционной системы Unix. Первоначально она была разработана American Telephone & Telegraph (AT&T) и впервые выпущен в 1983 г. "

-Википедия

«POSIX или« интерфейс переносимой операционной системы [для Unix] »- это название семейства связанных стандартов, определенных IEEE для определения интерфейса прикладного программирования (API)»

-Википедия

  • Systm V был там раньше. POSIX развился из инициативы стандартизации IEEE.

  • GNU / Linux partiallyсовместим с POSIX. Какой из них использовать, зависит от того, в какой ОС вы используете этот IPC. Большинство продавцов движутся в сторону POSIX.

Сетевое программирование Unix: Interprocess Communications v. 2 Ричарда Стивенса дает хороший взгляд на оба эти вопроса.

Сетевое программирование Unix

Джестин Джой
источник
5
Вы ничего не обсуждаете о межпроцессном взаимодействии, как указано в вопросах.
Майкл Райс,