siguiendo la discusión en How do you use AIO and epoll together in a single event loop?.revisitando "cómo se usa aio y epoll juntos"
De hecho, hay 2 API "aio" en Linux. Hay POSIX aio (la familia de funciones aio_ *), incluida en glibc y libaio desarrollada Creo que por RedHat (?), La familia io_ *.
El primero permite el registro de solicitudes de notificación a través del miembro aio_sigevent aiocb. Eso se puede integrar fácilmente con los bucles de eventos ppoll()/pselect(). Si quieres integrar POSIX aio con epoll(), entonces necesitas traducir la señal a un evento en fd ficticio (quizás una pipa) y escucharla con epoll, mientras captas la señal de forma clásica o con ppoll/seleccionar. Qué tan segura es la primera opción (signatarios normales), depende de la aplicación. Y tal vez en epoll pero no estoy completamente enterado de sus aspectos internos. ¿Puedo suponer sin temor a equivocarme que si tengo una aplicación basada en epoll y quiero agregar soporte POSIO aio, entonces estoy jodido? Esta fue mi pregunta.
La segunda implementación de AIO, libaio - se puede usar de hecho con eventfd() (struct iocb teniendo un miembro aio_resfd que se espera sea cero o un eventfd para entregar resultados AIO). Pero no es por el libro. POSIX-especificado, eso es.
Sueño con ser un * usuario de BSD donde todo está claro. Tiene el soporte POSIX AIO y kqueue() para eventos AIO. Claro como el cristal. Como muchas otras cosas.
puede dar un ejemplo para usar la combinación 'signalfd (2)' con POSIX aio y 'epoll' (' select', 'poll'), ya que la estructura' siginfo_t' tiene el miembro 'si_value' mientras que la estructura' signalfd_siginfo' regresa leyendo el 'signalfd' dosen't tiene un miembro correspondiente' ssi_value', ¿cómo puedo obtener el 'si_value' devuelto cuando una posix aio completa al leer el' signalfd'? – toolchainX
@toolchainX no, lo siento, en realidad nunca lo he hecho yo mismo – Spudd86