Вопрос

После обсуждения в Как вы используете AiO и Epoll вместе в одном контуре событий?.

В Linux есть 2 "Aio" API в Linux. Есть POSIX AIO (семейство функций AIO_ *), включенная в Glibc и Libaio, я верю по Redhat (?), Семья IO_ *.

Первый допускает регистрацию запросов уведомлений через член AIO_SIGEVENT AIOCB. Это можно легко интегрировать с петлями PPOLL () / PSELECT (). Если вы хотите интегрировать POSIX AiO с EPOLL (), то вам нужно перевести сигнал в событие на фиктивной FD (может быть, может быть) и прослушать его с помощью epoll, при прохождении сигнала либо классическим образом, либо с PPOLL / Выбрать. Насколько безопасным является первым выбором (обычными Sighandlers), зависит от применения. И, возможно, на EPOLL, но я не полностью осознаю его внутренних органов. Могу ли я благополучно предположить, что если у меня есть приложение EPoll на основе, и я хочу добавить поддержку POSIX AIO, то я прикручен? Это был мой вопрос.

Вторая реализация Aio, libaio - может быть использована действительно с EventFD () (struct iocb, имеющая элемент AIO_RESFD, который, как ожидается, будет нулевым или EventFD для доставки результатов AIO). Но это не по книге. POSIX-указанный, то есть.

Я мечтаю о себе быть * пользователем BSD, где все ясно. У вас есть поддержка POSIX AIO и KQueue () для событий Aio. Кристально чистый. Как много других вещей.

Это было полезно?

Решение

Примечание. Вы можете использовать Posix Aio с Epoll, есть signalfd(2) Он создает дескриптор файла, который вы можете использовать для уведомления сигналов в контуре на основе EPoll.

Также вторым AIO API должен в конечном итоге, в конечном итоге, на каком Glibc Base это реализация POSIX AIO, он еще не совсем там ... (Я не знаю, только ли кто-то работает над этим)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top