возвращаясь к теме «как вы используете AIO и EPOLL вместе»

после обсуждения вКак вы используете AIO и epoll вместе в одном цикле событий?.

На самом деле в Linux есть 2 API "aio". Есть 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. Кристально чистый. Как и многие другие вещи.

Ответы на вопрос(1)

Ваш ответ на вопрос