Система V IPC против POSIX IPC

  • В чем разница между System V IPC и POSIX IPC?
  • Почему у нас есть два стандарта?
  • Как решить, какие функции 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

  1. Я считаю, что основное отличие состоит в том, что все POSIX IPC являются поточно-ориентированными, в то время как большинство SysV IPC НЕ [1].
  2. Из-за Unix-войн [2]. Единая спецификация UNIX (SUS) [3], также известная как POSIX, была создана для стандартизации интерфейсов в системах на основе Unix.
  3. Вы, вероятно, хотите 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 Ричарда Стивенса дает хорошее представление об обоих из них.

Unix Network Programming