У меня была одна причина, по которой я выбрал очереди сообщений 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 существует уже давно, что имеет несколько практических последствий:
На всех платформах, перечисленных в этой документации, 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 оставался бы на долгие годы.
Мы не можем сказать вам, что вы должны использовать, не зная намного больше о том, что вы собираетесь делать, но ответы, которые у вас здесь, должны дать вам достаточно информации, чтобы вы могли принять решение самостоятельно.
Есть одно важное различие, которое не удается выделить на страницах руководства и в других статьях, то есть в очередях сообщений sysv есть понятие доставки сообщений по mtype (в posix msgq этого нет). В некоторых случаях это могло быть важным элементом дизайна, и, по моему опыту, это оказалось препятствием для шоу. Я писал об этом в блоге .
takladev 03
После документации OpenGroup SysV IPC был частью SUS, начиная с выпуска 2, и нового интерфейса, начиная с выпуска 7. Действительно, один существует с тех пор, как долго, но оба являются частью SUS, поэтому оба являются частью POSIX.
Hibou57
23
Я считаю, что основное отличие состоит в том, что все IPC POSIX являются потокобезопасными, в то время как большинство IPC SysV НЕ [ 1 ].
Из-за войн Unix [ 2 ]. Спецификации Single UNIX (SUS) [ 3 ], также известный как POSIX, была создана для стандартизации интерфейсов на системах Unix , основанных.
Возможно, вам нужен POSIX. Зависит исключительно от ваших требований.
System V IPC старше, а POSIX IPC новее. Однако есть некоторые отличия по некоторым аспектам. Не всегда Posix лучше System V.
Семафоры, очереди и разделяемая память для Posix имеют строковые имена Ascii, тогда как в System V они задаются целыми числами.
Семафоры System V позволяют автоматически освобождаться, если процесс умирает (флаг semop SEM_UNDO). Для Posix такого нет.
В 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.
System V IPC is well known and commonly used, but the Linux implementation of it is badly broken.
Ответы:
Оба имеют одинаковые базовые инструменты - семафоры, разделяемую память и очереди сообщений. Интерфейс этих инструментов немного отличается, но основные концепции остаются теми же. Одно заметное отличие состоит в том, что 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 оставался бы на долгие годы.
Мы не можем сказать вам, что вы должны использовать, не зная намного больше о том, что вы собираетесь делать, но ответы, которые у вас здесь, должны дать вам достаточно информации, чтобы вы могли принять решение самостоятельно.
источник
источник
System V IPC старше, а POSIX IPC новее. Однако есть некоторые отличия по некоторым аспектам. Не всегда Posix лучше System V.
Семафоры, очереди и разделяемая память для Posix имеют строковые имена Ascii, тогда как в System V они задаются целыми числами.
Семафоры System V позволяют автоматически освобождаться, если процесс умирает (флаг semop SEM_UNDO). Для Posix такого нет.
В Linux и FreeBSD есть большое преимущество очереди posix, поскольку обработчик, заданный mq_open, в основном является дескриптором файла, который можно опросить / epolled / selected / kqueued.
источник
-Википедия
-Википедия
Systm V был там раньше. POSIX развился из инициативы стандартизации IEEE.
GNU / Linux
partially
совместим с POSIX. Какой из них использовать, зависит от того, в какой ОС вы используете этот IPC. Большинство продавцов движутся в сторонуPOSIX
.Сетевое программирование Unix: Interprocess Communications v. 2 Ричарда Стивенса дает хороший взгляд на оба эти вопроса.
источник