Frage

im Anschluss an die Diskussion unter Wie verwenden Sie AIO und epoll zusammen in einer einzigen Ereignis-Schleife? .

Es gibt in der Tat 2 "AIO" APIs unter Linux. Es gibt POSIX aio (die aio_ * Familie von Funktionen), enthalten in glibc und libaio entwickelte ich glaube, von RedHat (?), Die IO_ * Familie.

Die erste erlaubt die Registrierung von Benachrichtigungsanforderungen über aio_sigevent aiocb Mitglied. Das kann leicht mit ppoll () / pselect () Ereignisschleifen integriert werden. Wenn Sie integrieren möchten POSIX aio mit epoll (), dann müssen Sie das Signal in ein Ereignis an einem Dummy fd (ein Rohr vielleicht) übersetzen und für sie mit epoll hören, während das Signal fangen entweder in klassischer Art und Weise oder mit ppoll / wählen. Wie sicher ist die erste Wahl (normal sighandlers), abhängig von der Anwendung. Und vielleicht auf epoll aber ich bin nicht voll bewusst seine Einbauten. Kann ich das mit Sicherheit annehmen, wenn ich eine epoll basierte Anwendung und ich möchte POSIX aio Unterstützung hinzufügen dann geschraubt ich? Das war meine Frage.

Die zweite AIO Implementierung libaio - verwendet in der Tat mit eventfd werden kann () (struct IOCB mit einem aio_resfd Elemente, das erwartet wird, Null oder eine eventfd seiner AIO Ergebnisse zu liefern). Aber es ist nicht durch das Buch. POSIX-angegeben, das ist.

Ich träume von mir a * BSD Benutzer zu sein, wo alles klar ist. Sie haben die POSIX AIO und kqueue () Unterstützung für AIO Veranstaltungen. Kristallklar. Wie viele andere Dinge.

War es hilfreich?

Lösung

Beachten Sie POSIX aio mit epoll verwenden können, gibt es signalfd(2) es einen Dateideskriptor erzeugt, dass man dann von Signalen in einer epoll basierten Schleife benachrichtigt verwenden kann.

Auch die zweite aio API, um schließlich sein soll, was glibc Basen es Implementierung von POSIX AIO auf, es ist einfach noch nicht so weit ... (ich weiß nicht, ob jemand auf sich entweder arbeitet)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top