после обсуждения на Как вы используете AIO и epoll вместе в одном цикле событий? .
На самом деле в Linux есть 2 "aio" API.
Есть POSIX aio (семейство функций aio_ *), включенное в glibc и libaio, разработанные, как мне кажется, RedHat (?), Семейство io_ *.
Первый позволяет регистрировать запросы на уведомления через aio_sigevent aiocb. Это может быть легко интегрировано с циклами событий ppoll () / pselect (). Если вы хотите интегрировать POSIX aio с epoll (), вам нужно преобразовать сигнал в событие на фиктивном fd (возможно, в трубу) и прослушать его с помощью epoll, перехватывая сигнал либо классическим способом, либо с помощью ppoll / Выбрать. Насколько безопасен первый выбор (нормальные сигилдеры), зависит от применения. И, возможно, на epoll, но я не до конца осведомлен о его внутренностях. Могу ли я с уверенностью предположить, что если у меня есть приложение на основе epoll и я хочу добавить поддержку POSIX aio, то я облажался? Это был мой вопрос.
Вторая реализация AIO, libaio, может действительно использоваться с eventfd () (struct iocb, имеющая член aio_resfd, который, как ожидается, будет нулевым, или eventfd для доставки результатов AIO). Но это не по книге. Указанный POSIX, то есть.
Я мечтаю о себе как о пользователе * BSD, где все ясно. У вас есть поддержка POSIX AIO и kqueue () для событий AIO. Кристально чистый. Как и многие другие вещи.