kqueue - kqueue

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

Kqueue - это масштабируемый интерфейс уведомления о событиях, представленный в FreeBSD 4.1 в июле 2000 года, также поддерживаемый в NetBSD, OpenBSD, DragonFly BSD и macOS. Первоначально Kqueue был создан в 2000 году Джонатаном Лемоном, который затем участвовал в основной группе FreeBSD. Kqueue позволяет программному обеспечению, подобному nginx, решать проблему c10k.

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

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

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

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

Содержание

  • 1 API
  • 2 См. Также
  • 3 Ссылки
  • 4 Внешние ссылки

API

Прототипы и типы функций находятся в sys / event.h.

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, identity, filter, flags, fflags, data, udata);

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

См. Также

  • icon Портал компьютерного программирования
  • Портал бесплатного программного обеспечения с открытым исходным кодом

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

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

  • в Solaris, Windows и AIX: порты завершения ввода-вывода
  • в Linux: системный вызов
    • epoll имеет аналогичную, но не идентичную семантику. epollуведомляет, когда файловый дескриптор готов к выполнению операции ввода-вывода, тогда как kqueue и IOCP уведомляют, когда запрошенная операция завершена.
    • inotify - это подсистема ядра Linux, которая замечает изменения в файловая система и сообщает об этом приложениям.

Ссылки

Внешние ссылки

Последняя правка сделана 2021-05-25 13:58:49
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте