Если один поток (скажем, X) ждет на epoll_wait()
, то другой поток (скажем Y) делает вызов epoll_ctl()
, чтобы зарегистрировать интерес к файловому дескриптору 9
. Может ли предыдущий вызов epoll_wait()
в потоке X вернуть дескриптор файла 9
добавлен по теме Y? Первоначальный вызов epoll_wait()
никогда не возвращался посередине в любой точке.Может ли epoll или kqueue обрабатывать асинхронные добавления файловых дескрипторов к себе
Теперь я хочу сравнить это и задать связанные вопросы в отношении двух других вызовов опроса в операционных системах. poll()
и kqueue
- Если ответ на этот вопрос верно, то есть способ добиться подобного поведения с
poll()
системного вызова? - Предположим, что
epoll_ctl()
является потокобезопасным, а нить X может безопасно звонитьepoll_ctl()
и имеет вызовepoll_wait()
, если дескриптор файла9
готов для ввода-вывода. Разделение функции для объявления интереса к файловому дескриптору и функции ожидания - вот что сделало бы эту функцию потрясающей. Но люди часто ссылаются наkqueue
иepoll
как используемые для той же функциональности. Однакоkqueue
не имеет отдельной функции, чтобы объявлять интерес в получении обратной связи для дескриптора. Кто-нибудь знает, какkqueue
может использоваться так же, какepoll
?epoll
, кажется, лучший вариант THREADSAFE там прямо сейчас, если это позволяет THREADSAFE «процентную декларацию»
С 'kqueue' вы можете * объявить интерес * без * получать события обратной связи *, передавая 0 как параметр 'nevents'. См., Например, [этот ответ] (http://stackoverflow.com/questions/5756402/how-do-replace-select-with-kevent-for-higher-performance) – Tsyvarev