Jump to content

эполл

epoll — это ядра Linux системный вызов для масштабируемого механизма уведомления о событиях ввода-вывода, впервые представленный в версии 2.5.45 ядра Linux . [1] Его функция — отслеживать несколько файловых дескрипторов, чтобы определить, возможен ли ввод-вывод на любом из них. Он предназначен для замены старого POSIX. select(2) и poll(2) системные вызовы , для достижения лучшей производительности в более требовательных приложениях, где количество отслеживаемых файловых дескрипторов велико (в отличие от старых системных вызовов, которые работают за O ( n ), время epoll работает за время O (1). [2]

epoll похож FreeBSD на kqueue, поскольку он состоит из набора функций пользовательского пространства , каждая из которых принимает аргумент дескриптора файла , обозначающий настраиваемый объект ядра, с которым они совместно работают. epoll использует структуру данных красно-черного дерева (RB-дерево) для отслеживания всех файловых дескрипторов, которые в данный момент отслеживаются. [3]

int epoll_create1(int flags);

Создает epoll объект и возвращает его файловый дескриптор. flags Параметр позволяет изменить поведение epoll. Он имеет только одно допустимое значение, EPOLL_CLOEXEC. epoll_create() это более старый вариант epoll_create1() и устарел с версии ядра Linux 2.6.27 и glibc версии 2.9. [4]

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

Управляет (настраивает), какие файловые дескрипторы отслеживаются этим объектом и за какими событиями. op может быть ДОБАВИТЬ, ИЗМЕНИТЬ или УДАЛИТЬ.

int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);

Ожидает любого из событий, зарегистрированных с помощью epoll_ctl, пока не произойдет хотя бы одно или не истечет время ожидания. Возвращает произошедшие события в events, до maxevents сразу. maxevents это максимальное количество epoll_event/файловые дескрипторы, которые необходимо отслеживать. [5] [6] В большинстве случаев maxevents устанавливается на значение размера *events аргумент ( struct epoll_event *events множество).

Режимы запуска

[ редактировать ]

epoll обеспечивает режимы запуска как по фронту , так и по уровню . В режиме, запускаемом по фронту, вызов epoll_wait вернется только тогда, когда новое событие будет поставлено в очередь с epoll объект, находясь в режиме срабатывания по уровню, epoll_wait будет возвращаться до тех пор, пока условие сохраняется.

Например, если труба зарегистрирована в epoll получил данные, звонок на epoll_wait вернется, сигнализируя о наличии данных для чтения. Предположим, считыватель потреблял только часть данных из буфера. В режиме, запускаемом по уровню, дальнейшие вызовы epoll_wait вернется немедленно, пока буфер канала содержит данные для чтения. Однако в режиме запуска по фронту epoll_wait вернется только после записи новых данных в канал. [1]

Брайан Кэнтрилл отметил, что epoll имел ошибки, которых можно было бы избежать, если бы он учился у своих предшественников: порты завершения ввода/вывода , порты событий (Solaris) и kqueue . [7] Однако большая часть его критики была адресована epoll's EPOLLONESHOT и EPOLLEXCLUSIVE параметры. EPOLLONESHOT был добавлен в версию 2.6.2 основной ветки ядра Linux, выпущенную в феврале 2004 года. EPOLLEXCLUSIVE был добавлен в версии 4.5, выпущенной в марте 2016 года. [8]

См. также

[ редактировать ]
  1. ^ Jump up to: а б «epoll(7) — страница руководства Linux» . Man7.org. 17 апреля 2012 г. Проверено 1 марта 2014 г.
  2. ^ Алексей Ковырин (13 апреля 2006 г.). «Использование epoll() для асинхронного сетевого программирования» . Ковырин.нет . Проверено 1 марта 2014 г.
  3. ^ «Реализация epoll (1)» . idndx.com . Сентябрь 2014.
  4. ^ С любовью, Роберт (2013). Системное программирование Linux (второе изд.). О'Рейли. стр. 97, 98. ISBN.  978-1-449-33953-1 .
  5. ^ «epoll_wait: maxevents» . 3 июня 2010 г. Проверено 6 июля 2023 г.
  6. ^ «epoll_wait(2) — страница руководства Linux» . 30 марта 2023 г. Проверено 6 июля 2023 г.
  7. ^ Архивировано в Ghostarchive и Wayback Machine : «Ubuntu убивает котят | BSD Now 103» . Ютуб .
  8. ^ "Эполл принципиально сломан на 1/2" . idea.popcount.org. 20 февраля 2017 г. Проверено 6 октября 2017 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9d3002aa3c84f50887455ed36f54f876__1713075420
URL1:https://arc.ask3.ru/arc/aa/9d/76/9d3002aa3c84f50887455ed36f54f876.html
Заголовок, (Title) документа по адресу, URL1:
epoll - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)