- В чем разница между
System V IPC
иPOSIX IPC
? - Почему у нас есть два стандарта?
- Как решить, какие функции IPC использовать?
Система V IPC против POSIX IPC
Ответ 1
Оба имеют одинаковые базовые инструменты - семафоры, разделяемую память и очереди сообщений. Они предлагают немного другой интерфейс для этих инструментов, но основные понятия одинаковы. Одно из отличительных отличий заключается в том, что 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 смогли узнать о сильных и слабых сторонах API Sys V. В результате POSIX API проще и проще использовать IMO, и я рекомендую его по API Sys V.
Я должен отметить, что я никогда не тестировал тесты производительности, чтобы сравнить их. Я думаю, что у старого API (Sys V) было бы больше времени чтобы быть настроенными на производительность, но это просто предположение, которое, конечно же, не подменяет реальное тестирование.
Что касается двух стандартов - POSIX создал свой стандарт, потому что считал, что это улучшение в стандарте Sys V. Но если все согласились с тем, что POSIX IPC лучше, многие многие программы по-прежнему используют Sys V IPC, и для переноса их всех в POSIX IPC потребуются годы. На практике это было бы нецелесообразно, поэтому, даже если бы весь новый код использовал POSIX IPC с завтрашнего дня, Sys V IPC будет придерживаться в течение многих лет.
Мы не можем сказать вам, что вы должны использовать, не зная намного больше о том, что вы намереваетесь делать, но ответы, которые вы здесь должны дать вам достаточно информации, чтобы сами решить.
Ответ 2
- Я считаю, что основное отличие состоит в том, что все POSIX IPC являются поточно-ориентированными, в то время как большинство SysV IPC НЕ [1].
- Из-за Unix-войн [2]. Единая спецификация UNIX (SUS) [3], также известная как POSIX, была создана для стандартизации интерфейсов в системах на основе Unix.
- Вы, вероятно, хотите POSIX. Зависит исключительно от ваших требований.
Ответ 3
Система 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.
Ответ 4
- Systen V и POSIX IPC - это две разные, но связанные реализации одного и того же.
"Unix System V, обычно сокращенно обозначаемая как SysV (и обычно произносится, хотя и редко пишется как" System Five "), является одной из первых коммерческих версий операционной системы Unix. Первоначально она была разработана компанией American Telephone & Telegraph (AT & T) и впервые выпущен в 1983 году. "
-Wikipedia
"POSIX или" Портативный интерфейс операционной системы [для Unix] "- это название семейства связанных стандартов, определенных IEEE для определения интерфейса прикладного программирования (API)"
-Wikipedia
Система V была там раньше. POSIX развился из инициативы стандартизации IEEE.
GNU/Linux совместима
partially
с POSIX. Какой из них использовать, зависит от того, с какой ОС вы используете этот IPC. Большинство поставщиков движутся кPOSIX
.
Сетевое программирование Unix: Interprocess Communications v. 2 Ричарда Стивенса дает хорошее представление об обоих из них.