Question

suite à la discussion à Comment faire ensemble dans une seule boucle d'événement que vous utilisez AIO et epoll .

Il y a en fait 2 "AIO" API dans linux. Il y a AIO POSIX (le aio_ * famille de fonctions), inclus dans glibc et je crois Libaio développé par RedHat (?), La io_ * famille.

La première permet l'enregistrement des demandes de notification par membre aio_sigevent aiocb. Cela peut être facilement intégré avec des boucles d'événements ppoll () / pselect (). Si vous souhaitez intégrer AIO POSIX avec epoll (), vous devez traduire le signal en un événement sur un fd factice (un tube peut-être) et écouter avec epoll, tout en rattrapant le signal soit de manière classique ou avec ppoll / sélectionner. Comment la sécurité est le premier choix (de sighandlers normale), dépend de l'application. Et peut-être sur epoll mais je ne suis pas pleinement conscient de ses internes. Puis-je considérer en toute sécurité que si j'ai une application basée epoll et je veux ajouter le support AIO POSIX alors je vissé? Ce fut ma question.

La seconde mise en oeuvre de AIO, libaio - peut être utilisé en effet avec eventfd () (IOCB struct ayant un élément de aio_resfd qui devrait être égal à zéro ou un eventfd pour fournir des résultats de AIO) à. Mais ce n'est pas par le livre. POSIX spécifiée, ce qui est.

Je rêve d'être moi-même un utilisateur * BSD où tout est clair. Vous avez le soutien AIO et Posix kqueue () pour les événements AIO. Clair comme de l'eau de roche. Comme beaucoup d'autres choses.

Était-ce utile?

La solution

Notez que vous pouvez utiliser avec AIO POSIX epoll, il y a signalfd(2) il crée un descripteur de fichier que vous pouvez ensuite utiliser pour être informé des signaux dans une boucle à base epoll.

Aussi la deuxième API AIO est censé éventuellement quelles bases glibc il est la mise en œuvre de l'AIO POSIX, il est tout simplement pas encore là ... (Je ne sais pas si quelqu'un travaille sur elle soit)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top