Троан Эрик В.
Шрифт:
В определенной системе при не очень высоком значении
13.1.5. Мультиплексирование с помощью
В версии 2.6 ядра Linux был предложен третий метод для мультиплексированного ввода-вывода по имени
Оба системных вызова
При использовании
79
Фактически ядро устанавливает обратный вызов для каждого файла, а затем, когда происходит событие, активизирует обратный вызов. Этот механизм устраняет проблемы масштабируемости при очень большом количестве файловых дескрипторов, поскольку опрос не используется в каждой точке.
Преимущества в плане производительности
Единственный параметр
Хотя дескриптор
Большинство этих параметров используют структуру
Эта структура обслуживает три цели: определяет, какие типы событий следует проверять, определяет типы произошедших событий и ассоциирует отдельный элемент данных с файловым дескриптором. Поле
80
EPOLLIN | Определяет, что операция read не блокируется; данные или уже готовы, или их уже не осталось для считывания. |
EPOLLOUT | Связанный файл готов для записи. |
EPOLLPRI | Файл имеет внешние данные, готовые для чтения. |
Второй элемент
81
Структура, показанная в тексте, предоставляет правильные размеры элементов на большинстве платформ, но они неправильны для машин, в которых
Системный вызов
Второй параметр,
EPOLL_CTL_ADD | Файловый дескриптор fd добавляется к набору файловых дескрипторов набором событий events . Если файловый дескриптор уже присутствует, он возвращает EEXIST . (Несколько потоков могут добавлять тот же файловый дескриптор к набору epoll более одного раза, но это действие ничего не меняет.) |
EPOLL_CTL_DEL | Файловый дескриптор fd удаляется из контролируемого набора файловых дескрипторов. Параметр events должен указывать на struct epoll_event , но содержимое этой структуры игнорируется. (Это еще раз доказывает, что events должен быть допустимым указателем; он не может быть NULL .) |
EPOLL_CTL_MOD | Системный вызов struct epoll_event для fd обновляется на основе информации, на которую указывает events . Это позволяет контролировать набор событий и обновлять элемент данных, ассоциируемый с файловым дескриптором, не создавая условий состязания. |