Rückblick auf "Wie benutzt man Aio und Epoll zusammen?"

im Anschluss an die Diskussion beiWie verwenden Sie AIO und epoll zusammen in einer einzigen Ereignisschleife?.

Es gibt in der Tat 2 "AIO" -APIs in Linux. Es gibt POSIX aio (die aio_ * -Funktionsfamilie), die in glibc und libaio enthalten ist, die meiner Meinung nach von RedHat (?), Der io_ * -Familie, entwickelt wurden.

Die erste ermöglicht die Registrierung von Benachrichtigungsanforderungen über ein aio_sigevent aiocb-Mitglied. Das kann einfach in ppoll () / pselect () - Ereignisschleifen integriert werden. Wenn Sie POSIX aio in epoll () integrieren möchten, müssen Sie das Signal in ein Ereignis auf einem Dummy-fd (z. B. einer Pipe) umwandeln und mit epoll abhören, während Sie das Signal entweder auf klassische Weise oder mit ppoll / abfangen. wählen. Wie sicher die erste Wahl ist (normale Seufzer), hängt von der Anwendung ab. Und vielleicht auf epoll, aber ich bin mir seiner interna nicht ganz bewusst. Darf ich davon ausgehen, dass wenn ich eine epollbasierte App habe und POSIX aio-Unterstützung hinzufügen möchte, ich fertig bin? Das war meine Frage.

Die zweite AIO-Implementierung, libaio -, kann in der Tat mit eventfd () verwendet werden (struct iocb mit einem aio_resfd-Member, von dem erwartet wird, dass es null ist, oder einem eventfd, an das AIO-Ergebnisse geliefert werden). Aber es ist nicht nach dem Buch. POSIX-angegeben, das heißt.

Ich träume davon, ein * BSD-Benutzer zu sein, bei dem alles klar ist. Sie haben die Unterstützung von POSIX AIO und kqueue () für AIO-Ereignisse. Kristallklar. Wie viele andere Dinge.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage