AIO-Netzwerk-Sockets und Nullkopie unter Linux
Frage
Ich habe mit Async Linux-Netzwerk-Sockets (AIO_READ et al. In AIO.H/Librt) experimentiert, und eine Sache, die ich herausgefunden habe, ist, ob es sich um keine Kopie handelt oder nicht. So ziemlich alles, was ich bisher gelesen habe, diskutiert die Datei -I/O, während sein Netzwerk -I/O -Interesse interessiert ist.
AIO ist ein bisschen schmerzhaft zu verwenden, und ich vermute, dass es nicht portierbar ist und sich fragt, ob es sich lohnt, damit auszuhalten. Zero Copy ist fast der einzige Vorteil (Albiet a für meine Zwecke), das es über (nicht blockierende) ausgewählt hätte/epoll.
Lösung
In GLIBC wird AIO mit POSIX -Threads und einem regulären implementiert pread
-Anruf. Es ist also wahrscheinlich teurer als select
oder epoll
und das tun read
oder recv
dich selbst.