Вопрос

Каковы компромиссы между использованием System V и семафора Posix?

Это было полезно?

Решение

От О'Рейли:

  • Одно отмеченное различие между реализациями System V и Semaphore Semaphore заключается в том, что в системе V вы можете контролировать, насколько можно увеличить или уменьшить количество семафора;В то время как в POSIX количество семафора увеличивается и уменьшается на 1.
  • Семафоры Posix не допускают манипулирования разрешениями семафора, тогда как система V семафоры позволяют вам изменить разрешения семафоров на подмножество исходного разрешения.
  • Инициализация и создание семафоров являются атомными (с точки зрения пользователя) в семафорах POSIX.
  • С точки зрения использования, System V Semaphores являются неуклюжими, а Semaphores Posix-прямые
  • Масштабируемость семафоров POSIX (с использованием неназванных семафоров) намного выше, чем System V Semaphores.В сценарии пользователя/клиента, где каждый пользователь создает свои собственные экземпляры сервера, было бы лучше использовать Semaphores POSIX.
  • Система V Semaphores, при создании семафорного объекта, создает массив семафоров, тогда как Posix Semaphores создают только один.Из-за этой функции создание семафора (следование памяти) является дорогостоящим в семафорах системы V по сравнению с Semaphores Posix.
  • Говорят, что производительность Semaphore Posix лучше, чем System V Semaphores.
  • Semaphores Posix обеспечивают механизм для семафоров в процессе, а не семафоры в масштабах.Таким образом, если разработчик забывает закрыть семафор, на выходе процесса семафор очищается.Проще говоря, семафоры POSIX обеспечивают механизм для непрерывных семафоров.

Другие советы

Две основные проблемы с общими/именованными семафорами POSIX, используемыми в отдельных процессах (не потоках):Семафоры POSIX не предоставляют механизма для пробуждения ожидающего процесса, когда другой процесс завершается, удерживая блокировку семафора.Отсутствие очистки может привести к появлению семафоров-зомби, которые приведут к взаимоблокировке любого другого или последующего процесса, который попытается их использовать.Также не существует POSIX-способа составить список семафоров в ОС, чтобы попытаться их идентифицировать и очистить.В разделе POSIX SysV IPC указаны инструменты ipcs и ipcrm для составления списка и управления глобальными ресурсами SysV IPC.Для POSIX IPC такие инструменты или даже механизмы не указаны, хотя в Linux эти ресурсы часто можно найти в /shm.Это означает, что сигнал KILL не тому процессу в неподходящее время может заблокировать всю систему взаимодействующих процессов до перезагрузки.

Другим недостатком является использование семантики файлов для семафоров POSIX.Подразумевается, что может существовать более одного общего семафора с одним и тем же именем, но в разных состояниях.Например, процесс вызывает sem_open, затем sem_unlink перед sem_close.Этот процесс по-прежнему может использовать семафор точно так же, как при отключении открытого файла перед его закрытием.Процесс 2 вызывает sem_open для того же семафора между вызовами sem_unlink и sem_close процесса 1 и (согласно документации) получает совершенно новый семафор с тем же именем, но в другом состоянии, чем процесс 1.Два общих семафора с одинаковым именем, работающие независимо, противоречит цели общих семафоров.

Ограничение, указанное выше, делает общие семафоры POSIX непригодными для использования в реальной системе без гарантии того, что неперехватываемые сигналы никогда не смогут быть отправлены.Второе ограничение можно смягчить путем тщательного кодирования, предполагая контроль над всем кодом, который будет использовать данный семафор.Честно говоря, более чем удивительно, что они вошли в стандарт в таком виде.

Я знаю, что это устарело, но для тех, кто все еще читает это, любезно предоставленное Google, я считаю, что причина № 1 использовать семафоры System V вместо семафоров POSIX (системного уровня) — это возможность получить ресурс семафора таким образом, который автоматически возвращается ядром НЕЗАВИСИМО, КАК ЗАВЕРШАЕТСЯ ПРОЦЕСС.

Я согласен, что множественные (атомарные) операции с семафорами используются редко (хотя они могут быть полезны во время промежуточной подготовки) и что интерфейс System V является странным, но просто нет способа надежно достичь той же семантики очистки с семафорами POSIX.

Интересно, что заставляет людей разрабатывать плохие API, такие как семафоры System V!Если у вас нет веских причин использовать семафоры System V (например, атомарные операции с множественным увеличением-уменьшением за один шаг), вам следует придерживаться именованных семафоров POSIX.

В связанной статье обсуждается, что не так и не интуитивно понятно с семафорами System V.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top