2010-06-04 4 views
6

Eksperymentowałem z asynchronicznymi gniazdami sieci Linux (aio_read i in. W aio.h/librt), a jedną rzeczą, którą próbowałem się dowiedzieć, jest to, czy są to zerowe kopie albo nie. Prawie wszystko, co do tej pory przeczytałem, omawia plik I/O, podczas gdy jego sieć I/O jest mi zainteresowana.Gniazda sieciowe AIO i zerowa kopia pod Linuksem

AIO to trochę trudny do użycia i podejrzewam, że nie jest przenośny, więc zastanawiam się, czy jego warto z tym żyć. Zero-kopia to tylko jedna korzyść (albiet, jeden z głównych dla moich celów), że miałby ponad (nieblokujący) select/epoll ..

+0

AIO wydaje się być częścią POSIX.1-2001, więc powinno być przenośne. –

+0

POSIX/glibc AIO (funkcje '-lrt' i' aio_ * ') i Linux AIO (" -laio' z funkcjami "io_ *") to dwie różne rzeczy. Ten pierwszy jest przenośny, ale ten drugi nie. Zobacz [Przewodnik użytkownika AIO Google] (http://code.google.com/p/kernel/wiki/AIOUserGuide). –

Odpowiedz

2

W GLIBC, AIO jest realizowane za pomocą wątków POSIX i zwykłego pread - połączenie. Jest więc prawdopodobnie droższy niż select lub epoll i samemu robi to sam: read lub recv.

+0

Trochę zaskakujące, chociaż, jak przypuszczam, z obecnym sprzętem (i niektórymi fantazyjnymi sztuczkami przywoławczymi?) Prędkości drutu stają się wąskim gardłem przed zapisem - przepustowość wywołań jądra ma ... – Remy