Как использовать эполл, запускаемый по краю и по уровню - PullRequest
0 голосов
/ 11 декабря 2018

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

Для каждого дескриптора файла я могу установить EPOLLET, чтобы получить поведение, инициируемое ребром.Без этого уровень срабатывает.Для граничного триггера записи для меня гораздо больше смысла, потому что исходящий трафик в основном простаивает, а триггер уровня постоянно вызывает событие.С другой стороны, для чтения я бы предпочел, чтобы уровень срабатывал, чтобы, когда не все данные были использованы, поток снова просыпался при следующем epoll_wait ().Это позволило бы обрабатывать один запрос на каждый входящий сокет без дополнительного учета или риска того, что один сокет истощает другие.

Проблема заключается в том, что на дескриптор файла можно указать только одну маску событий.Итак, мой вопрос: как использовать эполл, инициируемый как по краю, так и по уровню?

...