Jump to content

очередь

Kqueue — это масштабируемый интерфейс уведомлений о событиях, представленный во FreeBSD 4.1 в июле 2000 года. [1] [2] также поддерживается в NetBSD , OpenBSD , DragonFly BSD и macOS . Kqueue был первоначально написан в 2000 году Джонатаном Лемоном. [1] [2] затем участвовал в основной команде FreeBSD . Kqueue позволяет такому программному обеспечению, как nginx, решить проблему c10k . [3] [4] Термин «kqueue» относится к его функции как «очереди событий ядра». [1] [2]

Kqueue обеспечивает эффективные конвейеры событий ввода и вывода между ядром и пользовательской средой . Таким образом, можно изменять фильтры событий, а также получать ожидающие события, используя только один системный вызов для kevent(2) за каждую итерацию основного цикла событий . Это контрастирует со старыми традиционными вызовами системы опроса, такими как poll(2) и select(2) которые менее эффективны, особенно при опросе событий в многочисленных файловых дескрипторах.

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

Некоторые другие операционные системы , которые традиционно поддерживали только select(2) и poll(2) в настоящее время также предоставляют более эффективные альтернативы опросу, такие как epoll в Linux и порты завершения ввода-вывода в Windows и Solaris .

libkqueue представляет собой пользовательского пространства реализацию kqueue(2), который преобразует вызовы в собственный механизм обработки событий операционной системы. [5]

Прототипы и типы функций можно найти в sys/event.h. [6]

int kqueue(void);

Создает новую очередь событий ядра и возвращает дескриптор.

int kevent(int kq, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout);

Используется для регистрации событий в очереди, затем ожидания и возврата пользователю любых ожидающих событий. В отличие от epoll , kqueue использует одну и ту же функцию для регистрации и ожидания событий, а несколько источников событий могут быть зарегистрированы и изменены с помощью одного вызова. changelist Массив можно использовать для передачи изменений (изменение типа ожидаемых событий, регистрация новых источников событий и т. д.) в очередь событий, которые применяются до начала ожидания событий. nevents размер, предоставленный пользователем eventlist массив, который используется для получения событий из очереди событий.

EV_SET(kev, ident, filter, flags, fflags, data, udata);

Макрос, который используется для удобной инициализации struct kevent объект.

См. также

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

Независимые от ОС библиотеки с поддержкой kqueue:

Эквивалент Kqueue для других платформ:

  • в Solaris, Windows и AIX: порты завершения ввода-вывода . Обратите внимание, что порты завершения уведомляют о завершении запрошенной операции, тогда как kqueue также может уведомлять, когда файловый дескриптор готов выполнить операцию ввода-вывода.
  • в Linux:
    • Системный вызов epoll имеет схожую, но не идентичную семантику.
    • inotify — это подсистема ядра Linux, которая замечает изменения в файловой системе и сообщает об этом приложениям.
  1. ^ Jump up to: а б с Джонатан Лемон (2000). «kqueue, kevent — механизм уведомления о событиях ядра» . Перекрестная ссылка BSD . FreeBSD , OpenBSD , NetBSD , DragonFly BSD .
  2. ^ Jump up to: а б с Джонатан Лемон (1 мая 2001 г.). Kqueue: универсальное и масштабируемое средство уведомления о событиях (PDF) . Материалы программы FREENIX Track: Ежегодная техническая конференция USENIX 2001 г. USENIX (опубликовано 25–30 июня 2001 г.).
  3. ^ «Методы обработки соединений» . nginx.org .
  4. ^ Андрей Алексеев (2012). «§14. nginx» . В Эми Браун; Грег Уилсон (ред.). Архитектура приложений с открытым исходным кодом, том II: структура, масштаб и еще несколько бесстрашных хаков . Лулу.com . ISBN  9781105571817 .
  5. ^ libkqueue на GitHub
  6. ^ kqueue(2) FreeBSD по системным вызовам Руководство
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 344c432a1c9fa7932e23560b0b07f5ac__1713372480
URL1:https://arc.ask3.ru/arc/aa/34/ac/344c432a1c9fa7932e23560b0b07f5ac.html
Заголовок, (Title) документа по адресу, URL1:
kqueue - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)