Pregunta

siguiente la discusión en ¿Cómo se utiliza la OIA y epoll juntos en un bucle único evento? .

De hecho, hay 2 "AIO" API en Linux. Hay POSIX AIO (el aio_ * familia de funciones), incluida en glibc y libaio desarrollado creo por RedHat (?), El io_ * familia.

La primera de ellas permite el registro de solicitudes de notificación a través miembro de aio_sigevent aiocb. Que se puede integrar fácilmente con ppoll bucles de eventos () / pselect (). Si desea integrar POSIX AIO con epoll (), entonces usted necesita para convertir la señal en un evento en un fd ficticia (una tubería tal vez) y escuche con epoll, mientras que la captura de la señal, ya sea de una manera clásica o con ppoll / seleccionar. ¿Qué tan segura es la primera opción (sighandlers normales), depende de la aplicación. Y tal vez en epoll pero no estoy totalmente consciente de sus componentes internos. Puedo con seguridad asumir que si tengo una aplicación basada epoll y quiero añadir soporte POSIX AIO entonces estoy atornillado? Este fue mi pregunta.

La segunda aplicación AIO, libaio - se puede utilizar de hecho con eventfd () (IOCB struct que tiene un miembro aio_resfd que se espera que sea cero o un eventfd para ofrecer resultados AIO a). Pero no es por el libro. POSIX-especifica, que es.

Sueño de mí mismo ser un usuario * BSD, donde todo está claro. Usted tiene la POSIX AIO y el apoyo kqueue () para eventos AIO. Claro como el cristal. Al igual que muchas otras cosas.

¿Fue útil?

Solución

Nota Puede utilizar AIO POSIX con epoll, hay signalfd(2) crea un descriptor de archivo que se puede utilizar para ser notificado de las señales en un bucle basado epoll.

También la segunda API AIO se supone que el tiempo sea lo que glibc bases de ejecución de POSIX AIO en, simplemente no ha llegado todavía ... (No sé si alguien está trabajando en ello tampoco)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top