eventfd_read / write против sem_wait / post - PullRequest
4 голосов
/ 22 марта 2012

В Linux, в программе на C / C ++, если меня не волнует использование моего eventfd в «select», лучше ли использовать eventfd_read / write (с флагом EFD_SEMAPHORE) или sem_wait / post?

  • Есть ли проблемы с производительностью, надежностью, переносимостью?
  • Поскольку моя программа использует некоторые другие объекты eventfd (с "select"), я думаю, что было бы более логичным использовать eventfd, чем sem_wait /сообщение.

1 Ответ

4 голосов
/ 22 марта 2012

sem_wait / sem_post полностью являются пользовательским пространством, за исключением случаев, когда sem_wait блокирует или sem_post отправляет сообщение на семафор с официантом. Даже тогда выполняемые ими системные вызовы являются одними из самых быстрых путей в ядре.

С другой стороны, все, что использует файловые дескрипторы и io для синхронизации, полно системных вызовов, и они являются одними из самых медленных путей в ядре из-за огромной сложности io.

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

...