- В чем разница между
System V IPC
иPOSIX IPC
? - Почему у нас два стандарта?
- Как решить, какие функции IPC использовать?
System V IPC is well known and commonly used, but the Linux implementation of it is badly broken.
System V IPC
и POSIX IPC
?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.
«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 Ричарда Стивенса дает хороший взгляд на оба эти вопроса.