Обсуждение статьи тематического каталога: Различия kqueue (FreeBSD) и epoll (Linux) ( kqueue select poll epoll)Ссылка на текст статьи: http://www.opennet.me/base/dev/kqueue_vs_epoll.txt.html
В Linux знают о AIO, но уведомление там через сигналы. Во FreeBSD этот механизм тоже есть, но поломан :( Так что kqueue тут вынужденная альтернатива...
Насколько я понимаю, часть положений слегка устарела. В epoll() добавили остальные виды нотификации (Level Triggering vs Edge Triggering) и opaque user data. В остальном он по-прежнему сосёт.
Linux KQUEUE prototype
http://www.fsl.cs.sunysb.edu/~kolya/projects/
Реализована альфа версия поддержки KQUEUE в ядре линуха, кому очень надо доделайте и тащитесь от щастья
Статья малость устарела:1. Все три типа нотификаций в linux появились (об этом уже написали).
2. Opaque user data тоже появился (тоже уже написали).
3. Для того, чтобы убрать нотификацию EPOLLOUT не нужно делать два вызова. Делается это через EPOLL_CTL_MOD.
4. В 2.6.17 появился EPOLLRDHUP - позволяет ловить тот самый пресловутый конец файла, без дополнительного вызова recv.
5. Для нотификации об изменении метаданных на диске есть inotify, который пихаешь в тот же самый epoll. По аналогии с inotify для таймеров есть timerfd_create (опять же через epoll), для сигналов signalfd (опять же через epoll).Остального нет, но думаю постепенно реализуют.
io_uring однако